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中使用函数文件,引入文件
需要编写一个较庞大的脚本时,可能会涉及许多函数.变量.这是通常建议将众多的函数.变量放入一个单独的脚本内.这样做的好处很明显,不用担心某个函数.变量是否已经被定义和使用,也不用频繁地定义.清除函数和变 ...
最新文章
- 你还在用Swagger?试试这个神器!
- poj 1265 Area(pick 定理)
- 多线程的使用——模拟线程池的实现(2015-12-02 00:14:59)
- python【Matlibplot绘图库】绘制用于学术论文投稿的黑白图片
- java feature get_Java ShapeFeature.getLocations方法代码示例
- 突然明白了如何看待细枝末节
- BlockJUnit4ClassRunner
- 小程序和android联调,小程序打开APP指定页面
- 软件项目开发流程以及人员职责
- 移动端日历插件_小程序日历组件开发教程!
- android输入框边框距离,如何更改Android对话框边距(到屏幕边缘的距离)?
- 毕业设计 : 题目:基于深度学习的水果识别 设计 开题 技术
- 《果然新鲜》电商项目(44)- 利用Logstash自动同步数据库内容到ES
- 互联网造车最靠谱的方式是合作
- 利用alias自定义快捷命令
- Android模拟器检测体系梳理
- tl-wdr7300虚拟服务器怎么设置,TP-Link TL-WDR7300路由器无线桥接怎么设置?
- 学Java最值得读的10本英文书
- 李建忠设计模式之“单一职责”模式
- 华为无线学习笔记--WLAN基础配置