以下是引用Knocker在2007-7-23 13:34:21的发言:
for(i=0;s[i];i+=2)
程式逻辑性错误
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)
越界了
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);
----------------解决方案--------------------------------------------------------