我正在阅读 C编程语言,当它到达字符指针和函数(5.5)时,我遇到了问题。
在 5.5 中,作者展示了strcpy()
的四个版本。我的问题在于版本3:
/*strcpy: copy t to s; pointer version 3*/
void strcpy(char *s, char *t)
{
while (*s++ = *t++)
;
}
没有与'\ 0'进行比较。如何在这种条件下终止循环?
答案 0 :(得分:4)
有。赋值语句的值是指定的值。因此,它将检查指定的值是否为0
('\0'
),这是预期在此处完成的。
等效地,这段代码归结为(这是它的工作原理)。这样想 - 至少一旦副本发生。所以它告诉我们它将是一个do-while
循环。
char somechar;
do {
somechar = *t;
*s = somechar ;
s++;
t++;
} while( somechar );
答案 1 :(得分:4)
*s++ = *t++
相当于
(*s++ = *t++) != 0
相当于
(*s++ = *t++) != '\0'
答案 2 :(得分:1)
在C中,if (var = expression)
表示1)将表达式分配给 var ,然后2)检查 var 是否计算为 TRUE 。同样适用于while (var = expression)
。