1个回答
展开全部
先想一想字符串是什么样子的?比如下面两个:
abc\0
只包含一个\0的空串
再来看看对于以上两个字符串,A能否胜任工作。它相当于
do {*t=*s; t++; s++;}
while (*s);
是不是这样,你最好上机单步调试一下。假如我写的是对的,这意味着对于abc\0,当复制完字符c后,由于++的作用,s指向了下一个字符,使得*s=\0,导致while为假不再循环。这意味着目标字符串没有终止符\0,这就完蛋了。
对于空串\0,也是++的问题,复制完终止符\0后,有可能不结束循环,胡乱执行下去,导致溢出。
答案C是很标准的写法。赋值后,判断这个值是不是等价于假,为假意味着这个字符是终止符\0,那就没有必要继续执行了。
很简单的代码,却要写这么一大通才能说清楚,难怪别人不愿意回答。自己还是学会单步调试为好,更直观更简单,才能把书真正读薄
abc\0
只包含一个\0的空串
再来看看对于以上两个字符串,A能否胜任工作。它相当于
do {*t=*s; t++; s++;}
while (*s);
是不是这样,你最好上机单步调试一下。假如我写的是对的,这意味着对于abc\0,当复制完字符c后,由于++的作用,s指向了下一个字符,使得*s=\0,导致while为假不再循环。这意味着目标字符串没有终止符\0,这就完蛋了。
对于空串\0,也是++的问题,复制完终止符\0后,有可能不结束循环,胡乱执行下去,导致溢出。
答案C是很标准的写法。赋值后,判断这个值是不是等价于假,为假意味着这个字符是终止符\0,那就没有必要继续执行了。
很简单的代码,却要写这么一大通才能说清楚,难怪别人不愿意回答。自己还是学会单步调试为好,更直观更简单,才能把书真正读薄
更多追问追答
追问
C选项while里的意思是如果t=s 可是还没有赋值怎么会相等呢
追答
这个等号就是赋值啊,不要和==混淆了。它实际上就是while ((*t = *s) == true) 的缩写
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询