在K&R C编程书中,我遇到了这个用于字符串复制的代码片段:
/* strcpy: copy t to s; pointer version 3 */ void strcpy(char *s, char *t) { while (*s++ = *t++) ; }
这正确地复制了两个字符数组(当然它确实如此).我的问题是,为什么它的工作方式呢?里面似乎没有任何条件检查.有一个作业和一个后期增量.我的直觉是这总是评估为真(类似于while(1)总是评估为true,我们需要在某个地方休息以摆脱循环.
循环内部也没有任何东西.没有绑定检查,没有ifs,没有.这对我来说似乎非常危险和鲁莽.有人可以带我走过这个吗?谢谢.
运算符=
始终生成返回值:右操作数的值.(这就是为什么x = y = z = 5
是一个有效的表达式.)当你到达字符串的末尾时,*t++
指向'\0'
.此字符的计算结果为false,这就是为什么它会使while循环停止.
该'\0'
字符也被调用NUL
,这是唯一一个评估为false的字符,因为它的十进制值为0,而所有其他字符的十进制值都不是0.(这与众所周知的事实相对应,即数字0的计算结果为false并且所有其他数字都被评估为真.)
这是关于这个主题的一个主题.