我这里有一些C代码:
char *cat_copy(char *dest, char *src)
{
char *start = dest;
while (*++dest); //increment unless it can't anymore.
while (*src++)
{
*dest = *(src - 1);
dest++;
}
return start;
}我不得不使用while (*++dest)来让它工作,而不是while (*dest++)。
我读到:"--" operator in while ( ) loop,在我看来,使用while (*dest++)是有意义的。
为什么它不适用于*dest++?*dest++和*++dest的区别是什么?
发布于 2013-07-23 18:07:07
while (*++dest);这会增加dest,然后检查它是否指向字符串的终止空字节。在字符串的末尾,这将使dest指向终止空字节。
while (*dest++);这会增加dest,然后在增量发生之前检查它是否指向终止null。在字符串的末尾,这将使dest在终止null之后指向该字符。
因为在下面的复制部分,您希望覆盖dest的原始终止null,所以第一个版本工作得更好。
不过,第一个版本仍然有一个bug。它总是至少增加一次dest,如果dest从空字符串开始,这不是正确的做法。将*dest检查与dest++增量分离,使循环更加清晰,并正确地处理这种情况:
while (*dest)
dest++;发布于 2013-07-23 18:03:48
while (*++dest);就像
do {
dest++; // or ++dest
} while (*dest);何地as
while (*dest++);就像
while (*dest) {
dest++;
}
dest++;您需要复制所有的char,包括NUL字节。
使用while (*++dest);,您将在取消引用之前递增dest。如果第一个char是NUL字节,您就会错过它并在on上循环。
https://stackoverflow.com/questions/17817600
复制相似问题