数组长度

cidplp 2010-08-13 06:13:44
#include"stdio.h"
void main()
{
char a[2];
gets(a);
puts(a);
}
为什么字符长度是3,但输入很长一串字符,却还能打印出来
...全文
357 31 打赏 收藏 转发到动态 举报
写回复
用AI写文章
31 条回复
切换为时间正序
请发表友善的回复…
发表回复
chsunshine 2010-08-25
  • 打赏
  • 举报
回复
这是个潜在的危险!
zrebecca 2010-08-25
  • 打赏
  • 举报
回复
溢出问题,很危险的
GGS_521 2010-08-16
  • 打赏
  • 举报
回复
7楼正解
xlliu_2010 2010-08-16
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 kalimdor21990 的回复:]
我在Win下测试,输出字符串以后程序就崩溃了……
这就是溢出的问题,首先数组长度是2。其次,关于你的问题:在C语言中,数组建立以后其长度就被丢弃了,唯一保存的是数组的首地址,数组长度由程序员记忆,出了问题也由程序员负责。这个问题就相当于你没有记住数组长度,编译器不负责检查输入的内容是否超出数组长度。恰好你运行程序时a[2]这个数组后面有一大块空内存,所以这么多东西就都灌进去了。然后操作系统检测到……
[/Quote]

赞一个!
zhujian888 2010-08-16
  • 打赏
  • 举报
回复
堆栈溢出,存在shellcode 注入的危险。
ykbpbin 2010-08-15
  • 打赏
  • 举报
回复
能打印出来还是溢出了
沭水河畔 2010-08-15
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 laciqs 的回复:]
Never use gets() -- man page
[/Quote]
BUGS
Never use gets(). Because it is impossible to tell without knowing the data in advance how many
characters gets() will read, and because gets() will continue to store characters past the end of the
buffer, it is extremely dangerous to use. It has been used to break computer security. Use fgets()
instead.

It is not advisable to mix calls to input functions from the stdio library with low-level calls to
read(2) for the file descriptor associated with the input stream; the results will be undefined and
very probably not what you want.
艾莎云 2010-08-15
  • 打赏
  • 举报
回复
最多输入 4个字符
>=5个的话 就会溢出 满了……
lovestefanie 2010-08-15
  • 打赏
  • 举报
回复
溢出了,很多病毒就是这样的哈
cxxer 2010-08-15
  • 打赏
  • 举报
回复
C不做越界检查,输出字符串是以'\0'识别结尾的。
e_sharp 2010-08-14
  • 打赏
  • 举报
回复
越界了
bruceleeliya 2010-08-14
  • 打赏
  • 举报
回复
都是高手,我就不卖关子了。
ljhnew 2010-08-14
  • 打赏
  • 举报
回复
因为你out了
huanjieshuijing 2010-08-14
  • 打赏
  • 举报
回复
puts()遇到空白符的时候停止输出,你的长度越界了,产生溢出危险操作
qazwhl845174869 2010-08-14
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 ayw215 的回复:]
因为你越界了
[/Quote]
顶啊!
cao_julians 2010-08-14
  • 打赏
  • 举报
回复
数组使用“越界”和“溢出”是不同的概念。
越界是指用访问数组元素的方法处理了数组之外(不属于数组)的数据----包括改写了数组之外的数据;
溢出是指数据值超出了数据格式能表达的范围--它不会影响到其它数据
不能将“下标超出数组元素定义范围”理解为“溢出”
CJacky++ 2010-08-14
  • 打赏
  • 举报
回复
你在玩火。
canshui 2010-08-14
  • 打赏
  • 举报
回复
gets的只用是在,以a开始的地址上 赋值,回车后,自动加结束标志‘\0’

系统为a[2]分配的地址,后面可能是空,也可能不空,不空的话,就会产生危险……
qq_89178938 2010-08-14
  • 打赏
  • 举报
回复
越界了
Polyglot_g 2010-08-13
  • 打赏
  • 举报
回复
因为你越界了 !!!!!!!!!
加载更多回复(10)

69,371

社区成员

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

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