gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 05:48:55 28 4
gpt4 key购买 nike

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

最佳答案

当你使用

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.

关于c - 为什么 while (*s++ != '\0' ) 不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32447268/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com