我写了一个函数将字符串t复制到s的末尾,如果我这样写,它就有效
char strcat(char *s, char *t) {
while (*s != '\0')
s++;
while ((*s++ = *t++) != '\0')
;
}
Run Code Online (Sandbox Code Playgroud)
但是,如果我这样写它就不起作用
char strcat(char *s, char *t) {
while (*s++ != '\0')
;
while ((*s++ = *t++) != '\0')
;
}
Run Code Online (Sandbox Code Playgroud)
我不明白它们之间有什么区别
while (*s++ != '\0')
;
Run Code Online (Sandbox Code Playgroud)
和
while (*s != '\0')
s++;
Run Code Online (Sandbox Code Playgroud)
R S*_*ahu 11
当你使用
while (*s++ != '\0');
Run Code Online (Sandbox Code Playgroud)
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', ... }
^^^^
Run Code Online (Sandbox Code Playgroud)
由于中间存在空字符,因此"string 2"在大多数用途中都不会看到.
另一方面,当你使用:
while (*s != '\0')
s++;
Run Code Online (Sandbox Code Playgroud)
s循环中断时指向空字符.给定相同的输入,您将得到一个如下所示的字符数组:
{'s', 't', 'r', 'i', 'n', 'g', ' ', '1', 's', 't', 'r', 'i', 'n', 'g', ' ', '2', '\0', ... }
No null character in the middle.
Run Code Online (Sandbox Code Playgroud)