我寫了一個小程序,它反轉一個字符串,並將其打印到屏幕:這個程序是兼容的大和小endian系統?
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);
}
它完美地在開發的C++在Windows(小端)。 但我突然懷疑它的效率。如果你看這條線:
while (Begin < End)
我比較開始和結束的地址。這是正確的方法嗎? 此代碼是否適用於像Mac OS X這樣的大端操作系統? 或者我在想錯誤的方式?
我有上面提到的幾個疑問。 任何人都可以請澄清?
作爲一個次要的挑剔,TempChar在循環之外是毫無意義的,也沒有必要對它進行初始化。在循環內移動它,並使其爲const:const TempChar = * Begin ;. – unwind 2011-05-04 07:10:56
另一個小小的挑剔 - Mac OS X不是大端,它可以是大或小端,因爲它運行在x86(小端),PowerPC(大端)和其他體系結構上。 – 2011-05-04 07:16:29
如果您正在查找問題,則在傳遞位於數組開頭的空字符串時,此代碼具有未定義的行爲 - 無法在「開始之前」指針指向一個空字符串。在實踐中,它可以在平坦記憶模型的任何地方工作,也可能在大多數地方沒有。 – 2011-05-04 08:31:05