当前位置: 代码迷 >> C语言 >> [求助]新手求助,为什么输入字符能打过数组的限制
  详细解决方案

[求助]新手求助,为什么输入字符能打过数组的限制

热度:103   发布时间:2007-07-22 12:55:03.0
[求助]新手求助,为什么输入字符能打过数组的限制

RT!!

为什么输入字符能打过数组的限制,我输10进去也行
#include<stdio.h>
main()
{
int i;
char a[5];
gets(a);
for (i = 0; a[i] != '\0'; i++){
printf("%d ", i);
printf("%d i=%d\n", a[i], i);
}
printf("%d\n", a[i]);
getchar();
}

搜索更多相关的解决方案: 字符  输入  int  

----------------解决方案--------------------------------------------------------

循环结束条件是\N,如果你改为<5,看结果.


----------------解决方案--------------------------------------------------------
提示: 作者被禁止或删除 内容自动屏蔽
2008-03-30 09:07:51
now

来 自:广州
等 级:新手上路
帖 子:544
专家分:0
注 册:2007-11-9
  得分:0 
gets()的缺陷,其不检查目标数组是否可以容纳输入,多出的字符将会简单地溢出到相邻内存区。很早之前,这个BUG被利用,引发了UNIX网络流行的“蠕虫”病毒。

[[it] 本帖最后由 now 于 2008-3-30 23:12 编辑 [/it]]
----------------解决方案--------------------------------------------------------
ls说的没错。《c 专家编程》里有一小段关于这个漏洞的说明,可以参考下
----------------解决方案--------------------------------------------------------
没人告诉你gets能自动判断输入是否越界吧?

多出的字符串放在了相邻的内存中,这就是常说的内存溢出
----------------解决方案--------------------------------------------------------
  相关解决方案