今天在C代码中使用gets()时提示“warning: this program uses gets(), which is unsafe.”,然后这个程序还能运行,无聊的我开始查阅资料,为啥gets()会unsafe呢。

通过Google查阅前辈的问答,原来是这么回事。

gets()这个函数只有一个参数,那就是字符缓冲区的指针,并没有指定该缓冲区的长度也就是大小。当你输入一个很长很长的字符串的时候,gets ()函数会把每一个字符都存入到栈(statck)中,因此当字符串很大的时候就会导致程序异常终止。前辈们给的建议是使用fgets()函数替代gets()。

例子:

//使用gets()

char buffer[4096];

gets(buffer);

//使用fgets()替换gets()

char buffer[4096]; 

fgets(buffer, (sizeof buffer / sizeof buffer[0]), stdin);

参考网址:

1、Stackoverflow

最新文章

  1. [LeetCode] Remove Nth Node From End of List 移除链表倒数第N个节点
  2. ReportView报表开发记录(一)
  3. Java实现验证码制作之一Kaptcha验证码
  4. Office2010与vs2008不兼容导致的一系列问题(vs设计视图打不开,无法启动Asp.Net Development Server)
  5. iOS 如何适配iOS10
  6. Java:多线程
  7. Java学习----对象与对象之间的关系
  8. VS2012JSON自动生成对应的类
  9. linux_ssky-keygen + ssh-copy-id 无密码登陆远程LINUX主机
  10. SQL SERVER Buffer Pool扩展
  11. Mybatis generator代码生成
  12. 如何处理MySQL每月5亿的数据
  13. lnmp1.4 安装php fileinfo扩展 方法
  14. Educational Codeforces Round 47
  15. eclipse4.5(mars)环境
  16. 0051 MyBatis关联映射--多对多关系
  17. Django 实现网站注册用户邮箱验证功能
  18. HDU 1754——I Hate It——————【线段树单点替换、区间求最大值】
  19. 用树莓派做FTP服务器
  20. typedef函数用法

热门文章

  1. Python框架之Tornado(一)
  2. Windows phone重写返回键
  3. Linux常用网络命令
  4. javascript中15种原生对象类型系统综述
  5. javascript面向对象系列第三篇——实现继承的3种形式
  6. 一张图理解prototype、proto和constructor的三角关系
  7. php常用函数
  8. 使用Genymotion调试出现错误INSTALL_FAILED_CPU_ABI_INCOMPATIBLE解决办法
  9. 细说gulp
  10. Windows下Go语言的环境搭建