我这里有一些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
之间有什么区别。
答案 0 :(得分:4)
while (*++dest);
就像
do {
dest++; // or ++dest
} while (*dest);
其中
while (*dest++);
就像
while (*dest) {
dest++;
}
dest++;
您需要复制所有char
,包括NUL字节。
使用while (*++dest);
,您在解除引用之前递增dest
。如果第一个 char
是NUL字节,那么你会错过它并循环播放。
答案 1 :(得分:2)
while (*++dest);
这会增加dest
,然后检查它是否指向字符串的终止空字节。在字符串的末尾,这将使dest
指向终止空字节
while (*dest++);
这会增加dest
,然后在增量发生之前检查是否指向终止空值 。在字符串的末尾,这将使dest
指向终止空值后的字符。
由于在以下复制部分中您要覆盖dest
的原始终止空值,因此第一个版本效果更好。
第一个版本仍然有一个bug。 总是至少增加dest
一次,如果dest
以空字符串开头,这不是正确的事情。将*dest
检查与dest++
增量分开会使循环更清晰并正确处理此情况:
while (*dest)
dest++;