找到字符串的结尾:*s ++ VS*s然后是s ++

vol*_*lni 2 c pointers postfix-operator

我正在编写一个简单的字符串连接程序.

该程序按我发布的方式工作.但是,我首先使用以下代码编写它来查找字符串的结尾:

while (*s++)
    ;
Run Code Online (Sandbox Code Playgroud)

但是,该方法不起作用.传递给它的字符串未正确复制.具体来说,我试图将"abc"复制到一个持有"\ 0"的char []变量.

从阅读C K&R书籍看起来应该可行.紧凑的表格应采取以下步骤.

  1. *s与'\ 0'进行比较
  2. s指向下一个地址

那为什么不起作用呢?我在Debian上用gcc编译.

我发现这个版本确实有效:

strncat(char *s, const char *t, int n)
{
    char *s_start = s;

    while (*s)
        s++;

    for ( ; n > 0 && *t; n--, s++, t++)
        *s = *t;

    *(s++) = '\0';

    return s_start;
}
Run Code Online (Sandbox Code Playgroud)

提前致谢.

Chr*_*ung 15

结束后while (*s++);,s指向空终止符后面的字符.在下面的代码中考虑到这一点.


Joh*_*ler 6

问题是

 while (*s++)
     ;
Run Code Online (Sandbox Code Playgroud)

始终递增s,即使s为零(*s为假)

 while (*s)
    s++;
Run Code Online (Sandbox Code Playgroud)

仅当*s非零时才增加s

所以第一个将指向第一个\ 0 之后的第一个字符,而第二个将指向第一个\ 0.