为什么while(* s ++!=' \ 0')不起作用?

时间:2015-09-07 23:40:14

标签: c

我写了一个函数将字符串t复制到s的末尾,如果我像这样写

,它就有效
    char strcat(char *s, char *t) {
    while (*s != '\0')
        s++;
    while ((*s++ = *t++) != '\0')
        ;
    }

但是,如果我像这样写

,它就不起作用
    char strcat(char *s, char *t) {
    while (*s++ != '\0')
        ;
    while ((*s++ = *t++) != '\0')
        ;
    }

我不明白

之间的区别
while (*s++ != '\0')
        ;

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

1 个答案:

答案 0 :(得分:11)

使用时

while (*s++ != '\0');
当循环中断时,

s指向空字符后面的一个字符。您最终将t的内容复制到s但是在空字符之后。

如果s在函数前"string 1"t"string 2",则在函数结束时,您将得到一个看起来像的字符数组:

{'s', 't', 'r', 'i', 'n', 'g', ' ', '1', '\0', 's', 't', 'r', 'i', 'n', 'g', ' ', '2', '\0', ... }
                                         ^^^^

由于中间存在空字符,因此在大多数情况下都不会看到"string 2"

另一方面,当你使用:

while (*s != '\0')
        s++;
循环中断时,

s指向空字符。给定相同的输入,您将得到一个类似于:

的字符数组
{'s', 't', 'r', 'i', 'n', 'g', ' ', '1', 's', 't', 'r', 'i', 'n', 'g', ' ', '2', '\0', ... }
                     No null character in the middle.