关于TCPL中的strcpy()

时间:2017-12-28 02:37:11

标签: c strcpy

我正在阅读 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'进行比较。如何在这种条件下终止循环?

3 个答案:

答案 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)