我写了一个小程序,它反转一个字符串,并将其打印到屏幕:这个程序是兼容的大和小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