关于 TCPL 中的 strcpy()

About strcpy() in TCPL

我正在阅读 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'[=12=]'),这是预期在此处完成的。

等效地,此代码归结为(这就是它的工作方式)。像这样思考——至少一旦复制发生。所以它告诉我们这将是一个 do-while 循环。

char somechar;
do {
   somechar = *t;
   *s = somechar ;
   s++;
   t++;
} while( somechar );
*s++ = *t++

相当于

(*s++ = *t++) != 0

相当于

(*s++ = *t++) != '[=12=]'

在 C 中,if (var = expression) 表示 1) 将 expression 分配给 var,然后 2) 检查是否 var 的计算结果为 TRUEwhile (var = expression).

也是一样