为什么printf("%s",<数组名>)打印出来有乱码?

ding525 2008-06-18 10:02:15
下面这个程序打印出来的为什么是“aaa 0@”?
main()
{
char a[5];
int i;
for(i=0;i<5;i++)
a[i]=' ';
for(i=0;i<3;i++)
a[i]='a';
printf("%s",a);
}
...全文
2186 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
crocke 2008-06-19
  • 打赏
  • 举报
回复
都说到了.
顶!
dafndakfnkdanfkeahwrkdsafnkelwarjkdsanf,.nsdalirhelwnrfdskahfkewnrm,fds
luhongyu2108 2008-06-19
  • 打赏
  • 举报
回复

main()
{
char a[5];
int i;
for(i=0;i <5;i++)
a[i]='\0'; //改一下这里
for(i=0;i <3;i++)
a[i]='a';
printf("%s",a);
}

hopelin2005 2008-06-19
  • 打赏
  • 举报
回复

上面的都说到点了 , 加上结束符 '\0' 就行
brookmill 2008-06-19
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 liuborama 的回复:]
3楼的也不对
要加一个a[4]='\0';
[/Quote]
3楼没错,'\0'就是0
a[4]=0; 和a[4]='\0'; 是一样的
brookmill 2008-06-19
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 elovenana 的回复:]
a[4];这一位如果不是'\0';就是什么时候,碰到\0什么时候结束;
你可以这样
for(i=0;i <5;i++)
printf("%s",a[i]);
[/Quote]
是笔误吧,应该是
for(i=0;i <5;i++)
printf("%c",a[i]);
  • 打赏
  • 举报
回复
定义字符数组之后,使用之前,最好用memset(a,'\0',sizeof(a)); 初始化一下,这样就不容易出现类似的问题了……
BIGBIRDINWOODS 2008-06-19
  • 打赏
  • 举报
回复
字符串必须得有一个结束标志字符'\0',不然打印到其它内存里了。。。。。。。。。。
eyf0917 2008-06-19
  • 打赏
  • 举报
回复
说得好,字符串必须得有一个结束标志字符'\0',
shancao 2008-06-18
  • 打赏
  • 举报
回复
应该是这样‘\0’表示数组结束。
liuborama 2008-06-18
  • 打赏
  • 举报
回复
顶4楼,即便是
for(i=0;i <5;i++)
a[i]='a';
打印还是有可能出现乱码的,因为不知道在那里结束

3楼的也不对
要加一个a[4]='\0';
长安宁 2008-06-18
  • 打赏
  • 举报
回复
a[4];这一位如果不是'\0';就是什么时候,碰到\0什么时候结束;
你可以这样
for(i=0;i <5;i++)
printf("%s",a[i]);
9527他大爷 2008-06-18
  • 打赏
  • 举报
回复
你的字符串没有结束标志
relaxisland 2008-06-18
  • 打赏
  • 举报
回复
printf打印字符串必须以/0结尾吧,
不然printf不知道打印到哪里结束。
zbing0203 2008-06-18
  • 打赏
  • 举报
回复
main()
{
char a[5];
int i;
for(i=0;i <5;i++)
a[i]=' ';
for(i=0;i <3;i++)
a[i]='a';
a[4]=0;
printf("%s",a);
}
artman 2008-06-18
  • 打赏
  • 举报
回复
字符串没有结束符'\0'
brookmill 2008-06-18
  • 打赏
  • 举报
回复
字符串需要用'\0'做结尾,LZ的代码里没有,结果就是不确定的了,取决于a[5]之后的内存的内容。

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧