while("\0")为什么会跳出以下的while为什么又会跳出呢,因为以前是写PHP的不太理解,赋值不是一直会为真的吗?请输入代码/*strcpy:将t复制到s;指针版3*/voidstrcpy(char*s,char*t){ while(*s++=*t++) ;}
2 回答
冉冉说
TA贡献1877条经验 获得超1个赞
这个while判断的是*s++=*t++表达式的值对,没错,C语言里的表达式也是有值的,比如逗号表达式的值1,2,3的值等于最右边数的值即3这个赋值表达式的值也是等于赋值完后的左值即*s++,也即当前*s的值所以当t到达末尾的时候会读到字符串结尾的0,即*t为0,被赋值的*s也是0,while里面是个0自然会跳出循环另外'\0'的值为0,所以while('\0')会跳出循环另外while("\0")不会跳出循环,因为字符串常量的值实际山是它的地址,字符串常量的地址都不会是0
郎朗坤
TA贡献1921条经验 获得超9个赞
while("\0")这条语句判断的是"\0"的值,在C里面也就是"\0"的地址,这个条件会造成死循环,除非"\0"的地址为0,在MINGW32环境下测试如此while(*s++=*t++);这条语句判断的是赋值表达式的返回值,C里面赋值表达式返回的是左操作数的值,t和s是正确的字符串的情况下,最后一步会有*s='\0';发生,这时候ASCII'\0'的值为0,循环退出
添加回答
举报
0/150
提交
取消