C语言数组越界了怎么还是可以输出越界的字符????

如题:#include <stdio.h>
main()
{
int i=0;
char a[10];
printf("Enter a string:");
a[i]=getchar();
for(i=0;a[i]!='\n'; ){
i++;
a[i]=getchar();
}
a[i]='\0';
puts(a);
}
可以输出字符 不过如果字符超过10个还是可以正常输出 哪出错了

我们定义一个变量,实际上是向操作系统申请一段内存。
比如上述程序的char a[10],系统会给它分配一段连续的内存块用来存放数据。
这个内存块是随机的,它可以是目前空闲的任意一个内存段。
由于这个不确定性,所以它后面的内存块有两种可能:
如果恰好这段内存的后面的内存段没有被其他程序占用,那么我们对它进行使用是不会出错的。
就是你上述的超过10个还可以输入输出。但是它随时可能被其他程序修改得不到保证。
但是因为这段内存不属于本程序管理,它也有可能被其他程序占用,或者干脆就是操作系统禁止访问的区域,这时候就必定会导致错误了。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-03-14
因为你用了puts额,你看看puts的定义。puts输出字符串时要遇到'\0’也就是字符结束符才停止。超过10个了,但是a[9]后面并不是'\0',所以它还是能正常输出,知道遇到你输得a[i]='\0'后才停止。
第2个回答  2013-03-14
输出字符串是根据'\0'来判断是否结束的,不会管你数组是大小,就是因为这样,才有可能造成越界以后读到别人的内存,一般的内存没关系,但要是恰好读到操作系统的,就会core了