当前位置: 代码迷 >> C语言 >> 运行结果出现'烫'字
  详细解决方案

运行结果出现'烫'字

热度:584   发布时间:2007-07-23 14:21:04.0
以下是引用Knocker在2007-7-23 13:34:21的发言:
for(i=0;s[i];i+=2)

程式逻辑性错误

可能不同编译器有不同的处理吧...


----------------解决方案--------------------------------------------------------
越界了
for(i=0;s[i];i+=2)
你的意思应该是当s[i]为'\0'的时候就结束for循环,但是你的i+=2,使i的步进为2就有可能跳过s[i]='\0'的情况,所以这时候你还得测试一下s[i+1]的情况是否为'\0'
for(i=0;s[i]&&s[i+1];i+=2)


----------------解决方案--------------------------------------------------------
在TC中能输入输出汉字吗?
----------------解决方案--------------------------------------------------------
学习!这个好像见过
----------------解决方案--------------------------------------------------------
以下是引用boot2046在2007-7-23 17:12:01的发言:
越界了
for(i=0;s[i];i+=2)
你的意思应该是当s[i]为'\0'的时候就结束for循环,但是你的i+=2,使i的步进为2就有可能跳过s[i]='\0'的情况,所以这时候你还得测试一下s[i+1]的情况是否为'\0'
for(i=0;s[i]&&s[i+1];i+=2)


不是从字符串结束开始,以后都是'\0'么?


----------------解决方案--------------------------------------------------------
回复:(Oscar_0049)以下是引用boot2046在2007-7-23 ...
不一定的.也许内存后刚好有数据
----------------解决方案--------------------------------------------------------
c语言里并不能自己保证'\0'结束后都是‘\0'
除非你自己指定,也就是说你这个程序还可以这样改
char s[100], t[100];
memset(s, '\0', sizeof(s)); //加上这句,让字符串结束后的数组其他位置都为'\0'
printf("\nPlease enter string S:");
scanf("%s", s);
fun(s, t);
printf("\nThe result is : %s\n", t);


----------------解决方案--------------------------------------------------------
  相关解决方案