数组

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不会报错?
...全文
137 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
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
  • 打赏
  • 举报
回复
运行会出错.
「已注销」 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
  • 打赏
  • 举报
回复
你进行了非法的内存操作,如果会报错,就不存在内存溢出了。
就是不报错才危险啊,恩。

70,022

社区成员

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

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