1

我这里有一些 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++).

我在 while() 循环中读到: “--”运算符,在我看来使用它是有意义的while (*dest++)

为什么它不起作用*dest++*dest++和和有什么区别*++dest

4

2 回答 2

4
while (*++dest);

就好像

do {
  dest++; // or ++dest
} while (*dest);

然而

while (*dest++);

就好像

while (*dest) {
  dest++;
}
dest++;

您需要复制所有chars,包括 NUL 字节。

随着while (*++dest);dest在取消引用之前递增。如果第一个 char是 NUL 字节,你会错过它并在一个 on 上循环。

于 2013-07-23T18:03:48.507 回答
2
while (*++dest);

这会递增dest,然后检查它是否指向字符串的终止空字节。在字符串的末尾,这将dest指向终止的空字节

while (*dest++);

这会递增,然后在递增发生之前dest检查它是否确实指向终止的空值。在字符串的末尾,这将指向终止 null之后的字符。dest

由于在下面的复制部分中您要覆盖原始终止 null dest,因此第一个版本效果更好。

第一个版本仍然有一个错误。它总是dest至少增加一次,如果dest以空字符串开始,这不是正确的做法。将*dest检查与dest++增量分开使循环更清晰并正确处理这种情况:

while (*dest)
   dest++;
于 2013-07-23T18:07:07.000 回答