c语言编译后为何后面有乱码?

#include "stdio.h"
#include "math.h"
#include "string.h"
void main()
{

int i;
int j;
int n;
char a[100];
char b[]="156334#0123456789123546879";
for(j=0;j<100;j++)
{if(b[j]=='#')
{
n=j;
for(i=0;i<=9;i++)
{
a[i]=b[n+1];
n++;
}
printf("m=%s\n",a);

}
}
}
编译结果:
m=0123456789烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫
烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫
烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫
Press any key to continue

因为a数组没有字符串结束符号'\0'
可以这样改:
char a[100];
改成:
char a[100]={0};
或者:
printf("m=%s\n",a);前面加上一行:
a[i] = '\0';
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-10-09
你应该用的是VC吧,当然其他编译工具也可能是,VC对于一个新的空间的值默认不是0而是0xcc你的char a[100] 一开始要初始化,char a[100] = {0}或者memset(a,0,100);烫的asci是CC,意思就是告诉你你的数组没有初始化,而printf %s是以\0为结束的,就是0为结束,而你这里全是cc,所以会全部打出来。你可以看些memory窗口,看下你数组的内存区域里的数据就清楚了
第2个回答  2011-10-09
在printf("m=%s\n",a);
这个上面加一句a[i+1]='\0';就可以了~
这不是乱码,是内存溢出~!
第3个回答  2011-10-09
晕 %s是输出字符串 你相当于把a里的字符全输出了 而你只存了9个 其他的空间没有字符 就成了烫了、
相似回答