gets()函数的缺陷,引入fgets()函数
gets()函数简单易用,它读取整行输入,直到遇到换行符,然后丢弃换行符,储存其余的字符,并在这些字符的末尾添加一个空字符使其成为一个字符串。
那它的缺陷在哪里呢?
问题出在gets()只有唯一一个参数,数组名会被转换成该数组首元素的地址,它无法检查数组是否装得下输入行。
它只知道数组的开始处,并不知道数组中有多少个元素。
如果输入的字符串超过了数组的大小,会导致缓冲区溢出(buffer overflow),如果这些多余的字符只是占用了尚未使用的内存,就不会立即出现问题;如果它们擦写掉程序中的其他数据,会导致程序异常中止。
过去,有些人通过系统编程,利用gets()插入和运行了一些破坏系统安全的代码。
解决方法
使用fgets()来替代,fgets()函数通过第2个参数限制读入字符数来解决溢出的问题。
该函数专门设计用于处理文件输入。
fgets()函数的第2个参数指明了读入字符的最大数量,如果是n,读入n - 1个字符 或者 读到遇到的第一个换行符。
如果fgets()讲到一个换行符,会把它储存在字符串中,这点与gets()不同,它会丢弃换行符。
第3个参数指明要读入的文件。如果读入从键盘输入的数据,以stdin作为参数。
gets()函数的缺陷,引入fgets()函数相关推荐
- gets和fgets函数及其区别,C语言gets和fgets函数详解
gets和fgets函数及其区别,C语言gets和fgets函数详解 每当讨论 gets 函数时,大家不由自主地就会想起 1988 年的"互联网蠕虫",它在 UNIX 操作系统的 ...
- c语言中gets与fgets,gets和fgets函数及其区别,C语言gets和fgets函数详解
每当讨论 gets 函数时,大家不由自主地就会想起 1988 年的"互联网蠕虫",它在 UNIX 操作系统的 finger 后台程序中使用一个 gets 调用作为它的攻击方式之一. ...
- c语言gets()函数与它的替代者fgets()函数
在c语言中读取字符串有多种方法,比如scanf() 配合%s使用,但是这种方法只能获取一个单词,即遇到空格等空字符就会返回.如果要读取一行字符串,比如: I love BIT 这种情况,scanf() ...
- C语言fgets()函数(以指定长度读取文件中的字符,并存入字符数组变量中)
C语言fgets()函数(以指定长度读取文件中的字符,并存入字符数组变量中) 需要引入C 标准库 - <stdio.h> 文章目录 描述 声明 参数 返回值 实例 测试(确实只能读n-1个 ...
- [C] zintrin.h: 智能引入intrinsic函数 V1.01版。改进对Mac OS X的支持,增加INTRIN_WORDSIZE宏...
新版本-- http://www.cnblogs.com/zyl910/archive/2012/11/07/zintrin_v102.html [C] zintrin.h: 智能引入intrinsi ...
- 【C 语言】文件操作 ( 按照文本行的方式读写文件 | fgets 函数 | fputs 函数 )
文章目录 一.fgets 函数 二.fputs 函数 三.按照文本行的方式写文件 四.按照文本行的方式读文件 一.fgets 函数 fgets 函数 : 从 FILE *stream 指针指向的文件中 ...
- Python 3.x 引入了函数注释
Python 3.x 引入了函数注释,以增强函数的注释功能,下面是一个普通的自定义函数: def dog(name, age, species):return (name, age, species) ...
- c语言fgets函数的用法
fgets()函数用于从文件流中读取一行或指定个数的字符,其原型为: char * fgets(char * string, int size, FILE * stream); 参数说明: s ...
- 在Shell中使用函数文件,引入文件
需要编写一个较庞大的脚本时,可能会涉及许多函数.变量.这是通常建议将众多的函数.变量放入一个单独的脚本内.这样做的好处很明显,不用担心某个函数.变量是否已经被定义和使用,也不用频繁地定义.清除函数和变 ...
最新文章
- 混合云扛起云存储领军大旗
- 【记录】 安装qflow on ubuntu 16.04
- java通过代码显示特定窗体,如何把这两段代码在一个窗体显示,类似于windows自带的扫雷一样...
- Cloud for Customer的第一个显示的work center是怎么加载和渲染的
- 电路设计之干扰问题总结与分析
- php下拉选项登录_php下拉选项的批量操作的实现代码
- 【JEECG技术文档】JEECG online 表单填值规则使用说明
- python 获取帮助页_Python-爬取页面内容(涉及urllib、requests、UserAgent、Json等)
- 《设计模式之禅》--摘要
- SQL里变量的声明以及常用函数举例
- listview中getview异步加载网络图片
- 2.4 使用ARDUINO控制MC20进行GPS数据的获取和解析
- FreeRTOS的HOOK,以及(23)FreeRTOS 空闲任务分析
- CXF学习创建WebService
- 关于成本核算方法、步骤、成本分析的简单回复
- 浏览器中点击链接,跳转qq添加好友的实现方式
- hdu 5745 La Vie en rose 2016多校第二场1012
- pycharm安装lxml提示ERROR: b'xslt-config' \xb2\xbb\xca\xc7\
- 不懂数据库的码农不是好程序员!
- OpenCV笔记之六(1)——图像处理之图像变换