关于TCPL中的strcpy()
我正在阅读C编程语言,当它涉及到字符指针和函数(5.5)时,我遇到了一个问题 在5.5中,作者展示了四个版本的关于TCPL中的strcpy(),c,strcpy,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”进行比较。在这种情况下,循环的终止是如何工作的。赋值语句的值就是指定的值。因此,它将检查分配的值是否为0('\0
strcpy()。我的问题在于版本3:
/*strcpy: copy t to s; pointer version 3*/
void strcpy(char *s, char *t)
{
while (*s++ = *t++)
;
}
没有与“\0”进行比较。在这种情况下,循环的终止是如何工作的。赋值语句的值就是指定的值。因此,它将检查分配的值是否为0
('\0'
),这是此处需要完成的操作
等价地,这段代码归结为(这就是它的工作方式)。这样想吧——至少复制一次。所以它向我们展示了它将是一个do-while
循环
char somechar;
do {
somechar = *t;
*s = somechar ;
s++;
t++;
} while( somechar );
相当于
(*s++ = *t++) != 0
(*s++ = *t++) != '\0'
这相当于
(*s++ = *t++) != 0
(*s++ = *t++) != '\0'
在C中,if(var=expression)
表示1)将表达式赋值给var,然后2)检查var的计算结果是否为TRUE。这同样适用于while(var=expression)
,因此正如作者所说,这只是一种“习惯用法”@1MinLeft-Yes[15个字符]C语言的设计基本上就是为了生成这种类型的代码。