您的位置:首页 > 其它

由scanf引发的思考

2009-06-18 14:57 423 查看
#include <stdio.h>
main()
{
int n=5;
char c[5];
for(int i=0; i <n; i++){
scanf("%c",&c[i]);
fflush(stdin);}
printf(c);//为什么输出会多出奇怪的字符
return 0;
}

这是我最初的问题代码,是啊,为什么要输出一些奇怪的字符呢?因为我的数组没有结束字符'/0',就是这个原因!

对于字符串我们平常是这样用的c[5]={"iwai"};或者是c[5]="iwai";其中已将包含'/0'赋给了c[5],以前虽然知道,但是没注意
现在对比这个问题就很有代表性了,所以导致了上面输出的错误情况!
所以上述要将a[4]赋值'/0'才是正确的!
哎,搞的中午午觉都没怎么睡,收工睡觉!

至于为什么就算我没有结尾符号它也只是输出有限的无用数据,也没有因为没有结尾二结不了尾,这个是因为什呢机制呢?目前还不清楚,希望网友的帮助!

输出就是asdfg烫?
为什么计算机输出“烫”,而且我发现我电脑了很多区域都是“烫”

其实是这样的

内存里面会有存放'/0'的地方,打印的时,什么时候遇到内存中有'/0',就在那里结束,所以后面的字符长度是随机的

未初始化的变量会被系统赋初值为0xCC,超过了ASCII码0-127这个范围,因此这个“字符串”被系统当成了宽字符组成的字符串,即两个字节数据组成一个字符,而0xCCCC表示的宽字符正好是乱码中的那个“烫”字

哎,搞的中午午觉都没怎么睡,收工睡觉!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: