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

while("\0")为什么会跳出
以下的while为什么又会跳出呢,因为以前是写PHP的不太理解,赋值不是一直会为真的吗?
请输入代码/*strcpy:将t复制到s;指针版3*/
voidstrcpy(char*s,char*t)
{   
while(*s++=*t++)     ;
}
翻阅古今
浏览 1093回答 2
2回答

冉冉说

这个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

郎朗坤

while("\0")这条语句判断的是"\0"的值,在C里面也就是"\0"的地址,这个条件会造成死循环,除非"\0"的地址为0,在MINGW32环境下测试如此while(*s++=*t++);这条语句判断的是赋值表达式的返回值,C里面赋值表达式返回的是左操作数的值,t和s是正确的字符串的情况下,最后一步会有*s='\0';发生,这时候ASCII'\0'的值为0,循环退出
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript