A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© liulinjie 中级黑马   /  2014-6-22 17:40  /  3170 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

在Xcode中使用gets会提示是不安全的。为什么?
是因为会覆盖外面的内存空间,所以提示不安全吗? 比如
char a[5] = "abcd";
char b[5];
gets(b);     // 输入
printf("b = %s, a = %s", b , a);
如果输入的内容多于4个字节,就会覆盖数组a存储的内容。
但是我试了一下,使用scanf函数如果输入的字符多于4个,也会覆盖a的数据。
那为什么使用gets会提示是不安全的?

评分

参与人数 1技术分 +1 收起 理由
傘が咲く + 1

查看全部评分

2 个回复

倒序浏览
因为gets函数有一定的缺陷性,列如,gets函数是不检查边界的,有人可以利用gets()不检查边界,用输入进行攻击,所以不安全,还有就是使用gets()函数容易内存溢出,如,输入的字符串大于数组的容量时字符串就溢出了,另外.gets()函数接收的输入字符大小不受限制。

评分

参与人数 1技术分 +1 收起 理由
ios风痕 + 1

查看全部评分

回复 使用道具 举报
用scanf函数就行写为 scanf(“%c”,a);亲测可用
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马