免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 8860 | 回复: 20
打印 上一主题 下一主题

[C] 字符数组会自动扩容么? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-07-02 18:26 |只看该作者 |倒序浏览
10可用积分
#include<stdio.h>
#include<string.h>
int main()
{
char a[4];
strcpy(a,"hello,world");
printf("%s\n",a);
printf("\n");
reuturn 0;
}
这个代码是可以运行的,而且会输出hello world,这是为什么呢?难道字符数组a会自动扩容?

最佳答案

查看完整内容

程序并不知道数组只有 4 个元素, 因此它也不知道对 a[5] 的访问已经超出了数组的边界; 程序只是「盲目的」按照你的指示从 a + 5 的位置上取值, 至于这个位置是否合法它不关心,lz这样做已经造成溢出问题,下次多注意

论坛徽章:
0
2 [报告]
发表于 2009-07-02 18:26 |只看该作者
程序并不知道数组只有 4 个元素, 因此它也不知道对 a[5] 的访问已经超出了数组的边界; 程序只是「盲目的」按照你的指示从 a + 5 的位置上取值, 至于这个位置是否合法它不关心,
lz这样做已经造成溢出问题,下次多注意

论坛徽章:
0
3 [报告]
发表于 2009-07-02 18:31 |只看该作者
楼主运气不是一般的差。
已经溢出了,不过问题还没有表现出来而已。
这种事,你应该庆幸程序运行异常,至少你知道错了,而不是认为C数组具有扩展能力。

论坛徽章:
0
4 [报告]
发表于 2009-07-02 18:50 |只看该作者
If the destination string of a strcpy() is not large enough,  then  anything  might  happen.   Overflowing  fixed-length
       string  buffers is a favorite cracker technique for taking complete control of the machine.  Any time a program reads or
       copies data into a buffer, the program first needs to check that there’s enough space.  This may be unnecessary  if  you
       can  show  that  overflow  is  impossible, but be careful: programs can get changed over time, in ways that may make the
       impossible possible.

论坛徽章:
0
5 [报告]
发表于 2009-07-02 18:56 |只看该作者
char a[4];是局部变量,编译器通常会在栈上分配大于这个大小的内存空间,所以即使你溢出了但也不至于出错,但是你要知道已经发生溢出了,如果溢出的部分有变量被覆盖的话,那你就能看到效果了~

论坛徽章:
0
6 [报告]
发表于 2009-07-02 19:19 |只看该作者
字符串在弄长点儿看看

论坛徽章:
0
7 [报告]
发表于 2009-07-02 20:19 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
8 [报告]
发表于 2009-07-02 20:51 |只看该作者

回复 #7 cj_gameboy 的帖子

嗯,也许就不小心牵涉到别的程序了

论坛徽章:
0
9 [报告]
发表于 2009-07-02 21:07 |只看该作者
别人数组家外面都有栅栏,就C数组家没有,只是在该装栅栏的地上画了一条线。
你要跑出去,也没人拦你。跑出去了,要看你运气。如果是在美利坚合众国,你可能会被邻居一枪两个洞。或许正好碰到他心情好,就把你拖去家里吃他烤的牛排了。

论坛徽章:
0
10 [报告]
发表于 2009-07-02 21:43 |只看该作者
我在VC8下运行,程序崩溃了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP