我写了一个函数将字符串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++;
答案 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.