C语法.复制字符串

4 c string pointers

通过K&R我看到了一个函数strcopy的代码片段,它将一个字符数组复制到另一个.

如果t是指向第一个数组的指针,并且s是指向要复制到的数组的指针,则代码为:

void strcopy(char *s, char *t){

     while(*s++=*t++)
             ;
}
Run Code Online (Sandbox Code Playgroud)

我对while循环感到困惑.我强调在条件t内复制到s,但我不明白这里测试的是什么条件.什么时候会*t++是假(或零)?据推测,当字符串结束时.我们可以通过检查字符是否指向来测试字符串是否已完成'\0'.K&R说了很多.但是,这本书相当愉快地指出,这个测试是没有必要的.所以我想知道这里测试的是什么?

vsz*_*vsz 6

*s++ = *t++;
Run Code Online (Sandbox Code Playgroud)

是相同的:

*s = *t;
t++;
s++;
Run Code Online (Sandbox Code Playgroud)

条件总是评估左值,所以在这种情况下它就像测试一样

while(*s)
Run Code Online (Sandbox Code Playgroud)

当然,'\0'评估为假,所以你不需要while(something!='\0'),因为while(something)就够了.


Fré*_*idi 5

*s++ = *t++将评估分配的值.在字符串的末尾,*t将是'\0',并且在赋值时,表达式将计算为'\0'(C解释为false).

我猜K&R说没有必要进行额外的测试,因为一切都是在while条件下处理的.