在K& R C编程书中,我遇到了这个代码片段,用于字符串复制:
server.R
这正确地复制了两个字符数组(当然它确实如此)。 我的问题是,为什么它的工作方式呢?在这段时间内似乎没有任何条件检查。有一个作业和一个后期增量。我的直觉是这总是评估为真(类似于while(1)总是评估为true,我们需要在某个地方休息以摆脱循环。
循环中没有 。没有绑定检查,没有ifs,没有。这对我来说似乎非常危险和鲁莽。有人可以带我走过这个吗?感谢。
答案 0 :(得分:7)
运算符=
始终生成一个返回值:右操作数的值。 (这就是x = y = z = 5
是有效表达式的原因。)当您到达字符串末尾时,*t++
指向'\0'
。此字符的计算结果为false,这就是为什么它会使while循环停止。
'\0'
字符也称为NUL
,这是唯一的字符,其评估为false,因为its decimal value is 0,而所有其他字符的十进制值都不是0.(这相应众所周知,数字0评估为假,所有其他数字评估为真。)
Here是关于此主题的主题。
答案 1 :(得分:2)
0
和s++
将每个指针递增以指向下一个字符。
您可以在t++
内使用符号,例如:
if
因为赋值的结果用于检查条件。赋值运算符返回赋值的值。
c中的字符串由int a;
if (a = 3){
// this code will always be executed
}
if (a = 0){
// this code will never be executed
}
'\0'
终止。
0
这样,当char c = '\0'
if (c){
// this code will never be executed
}
指向t
时,这将分配给0
,并且分配结果也将为*s
,因此0
循环将退出。