关于 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 的计算结果为 TRUE。 while (var = expression)
.
也是一样
我正在阅读 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 的计算结果为 TRUE。 while (var = expression)
.