문자열을 뒤집어서 화면에 출력하는 작은 프로그램을 작성했습니다 :이 프로그램은 크고 작은 엔디안 시스템과 호환됩니까?
void ReverseString(char *String)
{
char *Begin = String;
char *End = String + strlen(String) - 1;
char TempChar = '\0';
while (Begin < End)
{
TempChar = *Begin;
*Begin = *End;
*End = TempChar;
Begin++;
End--;
}
printf("%s",String);
}
Windows (리틀 엔디안)의 Dev C++에서 완벽하게 작동합니다. 그러나 나는 그 효율성에 대해 갑작스러운 의심을 품고있다. 이 줄을 보면 :
while (Begin < End)
나는 시작과 끝 주소를 비교하고있다. 이것이 올바른 방법입니까? 이 코드는 Mac OS X와 같은 빅 엔디안 OS에서 작동합니까? 또는 잘못된 생각을하고 있습니까?
위에서 언급 한 몇 가지 의문점이 있습니다. 누구든지 명확히 할 수 있습니까?
사소한 nit-pick으로, 루프 밖에서 TempChar를 가질 필요가없고 초기화시에도 아무런 포인트가 없습니다. 루프 내부로 이동하여 const로 만듭니다. const TempChar = * Begin ;. – unwind
또 다른 사소한 단언 - Mac OS X은 빅 엔디안이 아니며 x86 (리틀 엔디안), PowerPC (빅 엔디안) 및 기타 아키텍처에서 실행될 때 크거나 작은 엔디안이 될 수 있습니다. –
문제를 찾고있는 경우이 코드는 배열 시작 부분에있는 빈 문자열을 전달할 때 정의되지 않은 동작을합니다. "시작 전에 하나"포인터를 가져 오는 것은 유효하지 않습니다. 실제로 플랫 메모리 모델을 사용하면 어디서든 작동 할 것이며, 대부분의 경우에는없는 것입니다. –