C11中替代gets()的函数

1、gets()函数及其存在的问题
在读取字符串时,scanf()和%s只能读取一个单词,即遇到 ’ ’ (空格)就会停止读取。在程序中经常需要读取一行字符串,而不是一个单词。在C11标准前,gets()函数就可以处理这种情况,读取整行输入,直到遇到换行符,就丢弃换行符,读入剩下的字符。
例如:
#include
int main(){
char words[100];
gets(words);
puts(words);

return 0;

}
INPUT

Hello World!
OUTPUT

Hello World!
但是,这里有一个严重的问题,gets()函数只有一个参数(words),gets函数只知道数组的开始地址,而不知道何时结束,因此当输入的字符串过长,就会导致缓冲区溢出问题。

2、gets()函数的替代品
1、fgets()
fgets(words,STLEN,stdin)

1、fgets()函数的第二参数指明了读入字符串的最长量,如果该参数为n,那么最多将会读入n-1个字符,或者读到换行符为止。

2、与gets()不同的是,fgets()会将读到的换行符存储在数组中,而gets()会丢弃换行符。

3、fgets()的第三个参数必须声明要读入的文件,如果从键盘读入,则声明为stdin作为参数,该标识符的定义在sdtio中。

如果我们不需要将换行符存储在数组中,那么可以将其处理掉:

int i=0;
while(words[i] != ‘\n’) i++;
words[i]=’\0’;
2、gets_s()
gets_s(words,STLEN)

1、gets_s()函数只从标准输入中读数据,因此它不需要第三个参数。

2、gets_s()也会丢弃换行符

如果读入的字符串没有超出存储长度,那么gets_s()和gets()是非常相似的,一旦超出了存储长度,gets()函数就会不安全,因为它会修改超出部分的内存,擦写现存的数据,而gets_s是安全的,一旦超出,就会自动调用“处理函数”,中止或退出程序。
转载于

C11中gets()的函数被删除相关推荐

  1. Python中的常用函数

    1.range()是一个函数 for i in range () 就是给i赋值: 比如 for i in range (1,3): 就是把1,2依次赋值给i range () 函数的使用是这样的: r ...

  2. Pandas批量删除dataframe列名中的后缀实战:使用rstrip函数批量删除列名中的后缀(suffix)、使用replace函数批量删除列名中的后缀(suffix)

    Pandas批量删除dataframe列名中的后缀实战:使用rstrip函数批量删除列名中的后缀(suffix).使用replace函数批量删除列名中的后缀(suffix) 目录

  3. Pandas批量删除dataframe列名中的前缀实战:使用lstrip函数批量删除列名中的前缀(prefix)、使用replace函数批量删除列名中的前缀(prefix)

    Pandas批量删除dataframe列名中的前缀实战:使用lstrip函数批量删除列名中的前缀(prefix).使用replace函数批量删除列名中的前缀(prefix) 目录

  4. 写一个函数DeleteRange删除单链表中结点的值在low 和high之间的结点

    /*实验2 1. 写一个函数DeleteRange删除单链表中结点的值在low 和high之间的结点 (low和high的值是多少可自由设计).并且要在程序中验证其功能实现. (可在实验1的第3题的基 ...

  5. C语言函数题- 删除字符串中下标为i的字符

    6-2 删除字符串中下标为i的字符 (10分) 本题要求实现一个函数,删除字符串中的下标为i的字符,i的值保证合法,即字符串一定存在下标为i的字符. 函数接口定义: void delstring ( ...

  6. C语言试题七之将函数字符串中的前导*号全部删除,中间和尾部的*号不删除。

    1. 题目 规定输入字符串中只包含字母和*号.请编写函数fun,它的功能是:将函数字符串中的前导*号全部删除,中间和尾部的*号不删除. 2 .温馨提示 C语言试题汇总里可用于计算机二级C语言笔试.机试 ...

  7. 26. 编写函数:删除一个字符串中的所有空格。

    编写函数:删除一个字符串中的所有空格. #include <stdio.h> #include <string.h> #define MAX 100 void fun(char ...

  8. Python中可以使用字符串处理函数来删除指定的字符或者字符集合。在这篇文章中,我们将会介绍如何使用Python来删除一个或多个指定字符。作为标题,《用Pyth...

    Python中可以使用字符串处理函数来删除指定的字符或者字符集合.在这篇文章中,我们将会介绍如何使用Python来删除一个或多个指定字符.作为标题,<用Python删除指定字符(Removing ...

  9. PHP数组函数 array_unique (删除数组中重复的值)

    在PHP中,数组函数 array_unique () 用来移除数组中重复的值.     函数语法: array_unique ( array $array [, int $sort_flags = S ...

最新文章

  1. 常用地理数据平台及环境数据资源 (GIS)
  2. 关键字提取_从杂乱无章的表格中找出关键字,批量提取字符
  3. idea中生成mapper xml文件,快速从代码跳转到mapper及从mapper返回代码的插件安装
  4. “熊猫烧香”式的病毒营销
  5. 440. 字典序的第K小数字
  6. 电商美工中秋节电商淘宝页面设计模板素材,临摹参考框架
  7. Mac 开发使用中的小技巧收集
  8. 如何复现论文中的算法
  9. 系统详细设计过程指南
  10. Eclipse 设置保护色
  11. python高斯求和函数_选择积分方法—高斯积分
  12. Multi-Object Trackers
  13. gmail注册方法_如何在Gmail中释放空间:5种回收空间的方法
  14. 无人车路径规划与控制综述
  15. Three.js的uv坐标贴图理解
  16. 如何永久关闭笔记本键盘
  17. AppScan详细使用教程
  18. 利用 Python 爬取了近 3000 条单身女生的数据,究竟她们理想的择偶标准是什么?
  19. 内网渗透之Windows 系统下的目标信息收集
  20. 计算机管理找不到防火墙,手把手解答win10系统防火墙服务找不到的问题

热门文章

  1. python虚函数_virtual(虚函数) vtbl(虚函数表)与vptr(虚函数表指针)
  2. ligertoolbar 动态加载按钮_Axure利用动态面板实现环形加载进度条
  3. Linux下解决高并发socket最大连接数限制,tcp默认1024个连接
  4. HTML前端开发之路——Transition
  5. WSS(Windows Storage Server)2008R2使用指南(三)配置及使用篇
  6. Ubuntu下配置Window CIFS共享
  7. 第76节:Java中的基础知识
  8. python基础学习(八)元组
  9. vim简单操作---学习随笔
  10. 成都Uber优步司机奖励政策(3月23日)