为了账号安全,请及时绑定邮箱和手机立即绑定

C语言\0与0的区别 以及while的判断

C语言\0与0的区别 以及while的判断

翻阅古今 2019-04-16 20:27:29
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
                            
查看完整回答
反对 回复 2019-04-16
?
郎朗坤

TA贡献1921条经验 获得超9个赞

while("\0")
这条语句判断的是"\0"的值,在C里面也就是"\0"的地址,这个条件会造成死循环,除非"\0"的地址为0,在MINGW32环境下测试如此
while(*s++=*t++);
这条语句判断的是赋值表达式的返回值,C里面赋值表达式返回的是左操作数的值,t和s是正确的字符串的情况下,最后一步会有*s='\0';发生,这时候ASCII'\0'的值为0,循环退出
                            
查看完整回答
反对 回复 2019-04-16
  • 2 回答
  • 0 关注
  • 1092 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信