数组

painAndhappy 2005-06-08 03:54:49
#include <stdio.h>

main() {
char cChar[3];

cChar[0] = 'a';
cChar[1] = 'b';
cChar[2] = 'c';
cChar[3] = 'd';
cChar[4] = 'e';
cChar[5] = 'f';
cChar[6] = '\0';

printf("%s", cChar);
}

程序如上
问题如下
为何数组上限>= 3不会报错?
...全文
88 点赞 收藏 11
写回复
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
foochow 2005-06-08
编译没错误,运行就挂了
回复
painAndhappy 2005-06-08
谢谢各位!
回复
sunman1982 2005-06-08
汗,这个问题实在是汗
回复
zg351229063 2005-06-08
C语言没有数组越界检查.
但是最好别这么用.
回复
zhaokugua 2005-06-08
编译时是不会报错的,只有在运行的时候才会出错(内存问题)
因为给下标大于2的(从3开始)的数组元素赋值时超出了系统分配的空间范围,
给这样的地址赋值会导致系统崩溃,因为它不属于系统给你分配的空间,本身
内容是无法预料的,改变它的内容更是无法预料的。
回复
kunp 2005-06-08
一定会有问题,因为你已经往其他地址写数据了。
试一试下面的代码:

-----------------------------------------------------------------------
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
char tChar[10]; //其他地址空间
char cChar[3];

cChar[0] = 'a';
cChar[1] = 'b';
cChar[2] = 'c';
cChar[3] = 'd';
cChar[4] = 'e';
cChar[5] = 'f';
cChar[6] = '1';
cChar[7] = '1';
cChar[8] = '1';
cChar[9] = '1';
cChar[10] = '1';
cChar[11] = '1';
cChar[12] = '1';
cChar[13] = '1';
cChar[14] = '1';
cChar[15] = '1';
cChar[16] = '1';
cChar[17] = '1';
cChar[18] = '\0';

printf("cChar: %x, %s\n", cChar, cChar); //打印变量地址和值

printf("tChar: %x, %s\n", tChar, tChar); //你会发现 tChar居然有值,对照一下cChar地址,你应该可以发现其中的奥秘

system("PAUSE");
return 0;
}
--------------------------------------------------------------------------------

在我机器上的运行结果是:

cChar: 22ff58, abcdef111111111111
tChar: 22ff68, 11
请按任意键继续. . .
回复
flying_no_9 2005-06-08
你调一下试试了.
回复
zhousqy 2005-06-08
运行会出错.
回复
小毛1983 2005-06-08
#include <stdio.h>

main() {
char cChar[3];

cChar[0] = 'a';
cChar[1] = 'b';
cChar[2] = 'c';
cChar[3] = 'd';
cChar[4] = 'e';
cChar[5] = 'f';
cChar[6] = '\0';

printf("%s", cChar);
}

程序如上
问题如下
为何数组上限>= 3不会报错?
--------------------
一定报错。。。。。。晕。。看书把。。兄弟。。
回复
ouye 2005-06-08
因为是连接在定义语句的后面,程序把这个看成了定义时候的初始化,就从新定义了这个数组
回复
dophin1003 2005-06-08
你进行了非法的内存操作,如果会报错,就不存在内存溢出了。
就是不报错才危险啊,恩。
回复
发动态
发帖子
C语言
创建于2007-09-28

6.3w+

社区成员

C语言相关问题讨论
申请成为版主
社区公告
暂无公告