fgets和gets的区别
在编程中发现gets和fgets一些区别总结一下;
1、 fgets比gets安全,使用gets编译时会警告
为了安全,gets少用,因为其没有指定输入字符的大小,限制输入缓冲区得大小,如果输入的字符大于定义的数组长度,会发生内存越界,堆栈溢出。后果非常怕怕
fgets会指定大小,如果超出数组大小,会自动根据定义数组的长度截断。(redhat9.0实验并不是如此,不知为何,照样能输出)
2、 用strlen检测两者的输入的字符串长度,结果不一样
gets:
fgets:
可以看到,同样是输入123
gets只有一次换行,这是因为程序的语句printf(“%s\n”,str)
fgets有两次,而第二次是其本身把回车换行符存入了字符串里
所以,gets的长度只有3和输入的字符串长度一样,fgets是4,多出来的是回车换行符。
具体的介绍:
fgets函数fgets函数用来从文件中读入字符串。fgets函数的调用形式如下:fgets(str,n,fp);此处,fp是文件指针;str是存放在字符串的起始地址;n是一个int类型变量。函数的功能是从fp所指文件中读入n-1个字符放入str为起始地址的空间内;如果在未读满n-1个字符之时,已读到一个换行符或一个EOF(文件结束标志),则结束本次读操作,读入的字符串中最后包含读到的换行符。因此,确切地说,调用fgets函数时,最多只能读入n-1个字符。读入结束后,系统将自动在最后加'\0',并以str作为函数值返回。
gets()将删除新行符, fgets()则保留新行符.
要去掉fgets()最后带的“\0",只要用 s[strlen(s)-1]='\0';即可。
fgets不会像gets那样自动地去掉结尾的\n,所以程序中手动将\n位置处的值变为\0,代表输入的结束。
针对于fgets,还要再说两句,下面这种用法,是安全的判断文件读取结束或者出错的好方式,切忌不能使用while(!feof(fp)) ,还有对于fgets的第二个参数是最大能读取文件字符的个数,一般最大的长度是1024字节。
while(fgets(..., stream)){
/* ... */
}
if(ferror(stream)){
/* ... */
}
fgets和gets的区别相关推荐
- fgets和scanf的区别
fgets和scanf的区别 1.测试使用scanf的一个例子: [cpp] view plaincopyprint? #include "stdio.h" #include &q ...
- C语言scanf fgets,C语言中输入函数(scanf()、fgets()和gets())的区别详解
前言 大家都知道在C语言中,有三种主要的输入函数:scanf(),fgets()以及gets().他们的使用方法及注意事项如下: 1.scanf() 它是一种格式化的输入方式,可一次性按照规定的格式输 ...
- gets与fgets,puts与fputs区别
一.gets与fgets //gets函数很危险,gets没有指定输入字符的大小,限制输入缓冲区的大小,如果输入的字符大于定义的数组长度,会发生内存越界,堆栈溢出.后果严重! 对于 gets 函数,它 ...
- fgets()与gets()的区别
最重要的一点,fgets()不会过滤掉换行符,因此从文件中得到字符串"123\n"时,\n没有被换成\0,字符串长度为4.而gets()则会将换行符换成空字符\0再存储,长度为3. ...
- c语言中 gets puts,C语言的文件输入输出 getc putc gets puts fgets puts fscanf fprintf
系统调用I/O函数open,write,read,都是生成文件描述符,然后对文件描述符操作,比如:STDIN_FILENO,STDOUT_FILENO 标准I/O函数,则是由fopen,fgets,f ...
- PHP学习笔记-文件操作1
转载请标明出处: http://blog.csdn.net/hai_qing_xu_kong/article/details/52294237 本文出自:[顾林海的博客] 前言 PHP支持文件上传功能 ...
- 关于学生信息录入(文件操作)的心得体会
批评一下c prime plus在文件这一章的描述,明显没有谭浩强版本叙述得清楚. 首先分清楚fprintf.fscanf.fgetc.fputc.fgets.fputs这些的清晰含义(少部分语句摘自 ...
- 《C和指针》学习备忘
有了之前的基础,此文只是把一些以前没有注意到的和值得学习的知识做一个记录. 第一章 作者认为使用#if 0 .... #endif比用/*和*/好,因为后者不能嵌套.但是对于//并没有说明. 第二章 ...
- PHP全栈学习笔记7
图形图像处理技术,gd库的强大支持,PHP的图像可以是PHP的强项,PHP图形化类库,jpgraph是一款非常好用的强大的图形处理工具. 在PHP中加载GD库 gd官方网址下载: http://www ...
最新文章
- 迈向未来的那五种人,自古以来就很重要的人
- jpa 循环引用_JPA中按身份引用
- scenebuilder各控件属性介绍_Flutter 全栈式——基础控件
- 树莓派c语言运行_树莓派完成简单的编程(四)
- python 碎片图像拼接_python实现图像拼接
- 索然无味的正则表达式
- 网易云解析接口PHP源码,网易云音乐直链解析API源代码^-^
- php中文离线手册 chm_PHP官方中文手册2017最新完整版 带用户注释 chm
- 无线硬盘的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
- 如何关闭Win10易升更新?
- iOS 自定义导航栏 简单好使用
- 决策树之五:连续变量计算过程
- Linux驱动子系统之I2C(一)
- ArangoDB自学笔记(万字!!全!!)
- Direct3D 11在windows7上提示创建d3d设备失败
- 如何在Qt中使用数据库Sqlite保存和提取图片
- 解决vs2013编译时scanf报错的方法
- verilog计数器
- Hue连接Mysql一直转圈圈连接不上的问题
- Excel 数据分析之Power Pivot常用函数(持续更新)
热门文章
- 数据结构 — 浅析红黑树原理以及实现
- html实现选择头像,HTML5实现上传头像图片大小选择(简单实现)
- 苹果应用分身_苹果微信双开,现在可以了。
- github.io网页无法打开(连接不是私密连接)
- mac 触控板手势以及常用快捷键
- 转:你不快乐是因为年少时得不到忘不了
- Abp vnext Web应用程序开发教程 5 —— 授权
- c语言coin函数库,Coin Test | C/C++程序员之家
- vue之push() pop() shift() unshift() splice() sort() reverse()等等
- 基于51单片机ds1302时钟、ds18b20、lcd12864的恒温器