我无法理解以下while循环的条件

I have problem understanding the condition of the following while loop

提问人:Zolo_Ryan 提问时间:12/26/2022 最后编辑:Andreas WenzelZolo_Ryan 更新时间:12/26/2022 访问量:89

问:

void strcpy(char *s, char *t)
{
    int i;
    i = 0;
    while ((*s = *t) != '\0') {
        s++;
        t++;
    }
}

我制作了一个函数,使用K&R的指针将字符串复制到字符串。 while 循环使用,这应该意味着运行循环直到我们到达字符串的末尾 但我不明白它是如何工作的, 据我说:当到达终点时,它被分配了,但是如何与部分进行比较,括号是否在结尾返回,然后进行比较并结束循环?ts(*s = *t)!='\0'ts'\0'!='\0'(*s=*t)'\0'

c while-loop 赋值运算符 strcpy

评论

3赞 Harith 12/26/2022
这回答了你的问题吗?“while(*s++ = *t++)”如何复制字符串?
1赞 Zakk 12/26/2022
i从不在代码中使用。
0赞 Gerhardh 12/26/2022
“当到达终点时,s 在结尾处得到 '\0'” 关闭,但错误。不,不会变成,但会是 0。sNULL*s

答:

2赞 Andreas Wenzel 12/26/2022 #1

一般来说,线

if ( ( a = b ) != c )

等同于以下内容:

a = b;
if ( a != c )

这是因为子表达式的计算结果为 。( a = b )a

出于同样的原因,在行中

while ((*s = *t) != '\0')

子表达式的计算结果为 ,因此循环条件有效为 ,其中 是新值,即 的值。( *s = *t )*s*s != '\0'*s*t

所以是的,你是对的,循环一旦变成空字符就会结束。*t

0赞 0___________ #2

它可以用较短的形式写成。该函数还应该返回一些内容。

char *strcpy(char *dest, const char * restrict src)
{
    char *wrk = dest;
    while ((*wrk++ = *dest++));
    return dest;
}