提问人:Zolo_Ryan 提问时间:12/26/2022 最后编辑:Andreas WenzelZolo_Ryan 更新时间:12/26/2022 访问量:89
我无法理解以下while循环的条件
I have problem understanding the condition of the following while loop
问:
void strcpy(char *s, char *t)
{
int i;
i = 0;
while ((*s = *t) != '\0') {
s++;
t++;
}
}
我制作了一个函数,使用K&R的指针将字符串复制到字符串。
while 循环使用,这应该意味着运行循环直到我们到达字符串的末尾
但我不明白它是如何工作的,
据我说:当到达终点时,它被分配了,但是如何与部分进行比较,括号是否在结尾返回,然后进行比较并结束循环?t
s
(*s = *t)!='\0'
t
s
'\0'
!='\0'
(*s=*t)
'\0'
答:
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;
}
上一个:标准库类上的自定义赋值运算符
评论
i
从不在代码中使用。s
NULL
*s