先来讲讲大家最熟悉的gets()函数。

1.gets()函数不安全。

2.C11标准委员会已经将其废除,建议能不用尽量不用。

解释:

gets()函数的作用:它读取整行输入,直至遇到换行符,然后丢弃换行符,储存其余字符,并在其末尾添加一个空字符使其成为一个字符串。

听起来挺安全的,问题在于gets()函数不检查函数边界,有多少字符它就给你输入多少(来者不拒),这就造成了一个问题:缓冲区溢出(buffer overflow)。这意味着:如果他们有可能擦掉程序中的其他数据(即把数据放到了存储别的数据的地方并将其覆盖)这样就很容易出现问题。

gets()的替代品:

fgets()

get_s()

s_gets()

一. fgets()

fgets()通过第2个参数来限制读入的字符数来解决溢出问题。

函数专门用于处理文件输入,一般情况下不是很好用。

解释:

fgets()函数的第2个参数指明了读入字符的最大数量。如果参数是n,那么fgets()函数将读入n-1个字符,在最后加上空字符。或者读到遇到的第一个换行符为止。(也就是说:一旦读入的字符超过n-2将没有读入换行符)并将换行符储存在字符串中(注意与gets()对比)fgets()函数的第三个参数指明要读入的文件,如果读入从键盘输入的数据,则以stdin1(标准输入)作为参数,该标识符定义在stdio.h中。

#include

#define SIZE 10

int main ()

{

char words[SIZE];

fgets(words,SIZE,stdin);

fputs(words,stdout);

return 0;

}

fgets()函数的用法,大家体会一下。

二.gets_s()函数

gets_s()只从标准输入中读取数据,所以起形式为

gets_s(char *p,int n);//n表示其最多读取的数量,一般为数组大小

gets_s()读到换行符,会丢弃它。

如果输入行太长,gets_s()会丢弃该输入行的其余字符。

解释:

其优越性在于第三点:正常来讲,输入行中多出来的字符会被留在缓冲区中,成为下一次读取语句的输入。如果下一次读取的是int 或者double类型,就可能导致程序崩溃。但优点同时也是缺点,因为在其抛弃字符的同时并不会告知我们,一旦输入出现问题我们必须自己查找。

对于平时的应用大致了解这些就够了,主要了解一下用法,通常情况下我们是不会数组越界的。但是我想说的是fgets()和gets_()函数还有很多细节没有讨论,还有一些奇奇怪怪的用法等着我们去讨论。

stdin是C语言中标准输入流,一般用于获取键盘输入到缓冲区里的东西。 ↩︎

c语言s_gets函数作用,C语言中gets_s(),gets(),fgets()函数的比较。相关推荐

  1. exit在c语言里的作用,C语言中exit函数的使用

    exit() 结束当前进程/当前程序/,在整个程序中,只要调用 exit ,就结束 return() 是当前函数返回,当然如果是在主函数main, 自然也就结束当前进程了,如果不是,那就是退回上一层调 ...

  2. c语言printf函数的作用,c语言中printf用法及其函数定义

    c语言中printf用法及其函数定义 发布时间:2020-04-09 10:51:14 来源:亿速云 阅读:354 作者:小新 今天小编给大家分享的是c语言中printf用法及其函数定义,很多人都不太 ...

  3. c语言atan的作用,C语言中的atan和atan2

    在C语言的math.h或C++中的cmath中有两个求反正切的函数atan(double x)与atan2(double y,double x)  他们返回的值是弧度 要转化为角度再自己处理下. 前者 ...

  4. c语言中exit函数作用,c语言中exit函数 c语言中exit与break区别

    C语言中exit();怎么用? exit() 结束当前进程/当前程序/,在整个程序中,只要调用 exit ,就结束. return() 是当前函数返回,当然如果是在主函数main, 自然也就结束当前进 ...

  5. sort在c语言中的作用,c语言中sort的用法详解.docx

    c语言中sort的用法详解.docx C语言中SORT的用法详解C语言的学习很多是比较复杂的,那么C语言中SORT的用法的用法你知道吗下面学习啦小编就跟你们详细介绍下C语言中SORT的用法的用法,希望 ...

  6. c语言sinx的作用,C语言中 sinx cosx 的用法

    #include #include int main() { double pi=acos(-1.0); double angle; scanf("%lf",&angle) ...

  7. c语言getchar函数的作用,c语言中getchar的用法函数用法

    当程序调用getchar时.程序就等着用户按键.用户输入的字符被存放在键盘缓冲区中.直到用户按回车为止.下面小编就跟你们详细介绍下c语言中getchar的用法,希望对你们有用. c语言中getchar ...

  8. c语言fgetc函数作用,C语言中fgetc函数的使用方法

    该函数包含在C语言中的stdio.h头文件中,主要功能是从流中读取一个字符,并增加文件指针的位置. 函数原型:int fgetc(FILE *fp); 函数功能:从流中读取字符,即从fp所指定的文件中 ...

  9. c语言ftell的作用,C语言中ftell函数的使用方法

    在C语言中,ftell函数用来返回回当前文件指针的位置.其定义在stdio.h头文件中.具体介绍如下: 函数原型:long ftell(FILE *fp); 是否是标准函数:是 函数功能:返回当前文件 ...

最新文章

  1. BZOJ-几道比较有趣的题目
  2. mysql 核对_核对数据库表记录的shell脚本
  3. 工作65:element三级文档多选
  4. 如果简历上真写了“会多线程”,那面试一般会被怎么问?
  5. 机器学习之神经网络学习及其模型
  6. bash 函数内部变量_使用源命令将函数和变量导入Bash
  7. 封装BackgroundWorker控件(提供源代码下载,F5即可见效果)
  8. python-time、datetimme模块
  9. 使用AD14创建异形PCB板
  10. 微软力挺程序员硬刚996!
  11. pmap anon 内存泄露
  12. Web.17.EL表达式JSTL标签的使用
  13. 利用python进行prosper贷款数据EDA分析(一)
  14. Fuzz方法在SPDK iSCSI的应用实例
  15. 键盘按d就计算机,电脑为什么一按D就返回桌面?一按M也回桌面、按L直接待机了?:excle按d就返回桌面...
  16. dell服务器bios修改uefi,Dell PowerEdge BIOS 和 UEFI 参考指南
  17. 阿里云效git仓库的创建与使用
  18. VsCode使用Git连接Gitee和GitHub
  19. 综合练习Java算法
  20. 第10章 车间工位吊 多工况移动载荷分析(网格划分详细)正反框选、网格过度bias(size)、face meshing(层数控制)

热门文章

  1. 24V转5V的常规操作7812,7805,重要的是器件选型
  2. git clone 拉取github上面的代码报错:fatal: Authentication failed for xxx解决
  3. HDU6268 Master of Subgraph
  4. linux 路由添加
  5. charles抓手机app的包的操作步骤
  6. UI 自定义视图 ,视图管理器
  7. WPF:在XmlDataProvider上使用主-从绑定(Master-Detail Binding)
  8. QQ抢车位外挂(起始篇)--小研究成果展示
  9. C# 中格式化字符串中包含 { 或者 } 如何转义?
  10. [转载] python日期时间使用详解和定时器使用讲解