在提交问题时,不少接收字符串的时候可以用gets函数(以前确实可以),但由于get函数不提供给出足够长的输入字符串时,避免目标数组缓冲区溢出的手段。 std::gets 于 C++11 被弃用,并于 C++14 移除。

可使用 std::fgets 替代。也就是说现在只要用C++11及以后版本的标准,gets函数都不能再用了


不过,我们可以使用#define gets(S) fgets(S,sizeof(S),stdin) 作为兼容性宏替换。


附:

fgets函数原型:

char *fgets(char *str, int n, FILE *stream);


参数含义:

str这是指向一个字符数组的指针,该数组存储了要读取的字符串。

n这是要读取的最大字符数(包括最后的空字符)。通常是使用以 str 传递的数组长度。

stream这是指向 FILE 对象的指针,该 FILE 对象标识了要从中读取字符的流。


返回值:

如果成功,该函数返回相同的 str 参数。如果到达文件末尾或者没有读取到任何字符,str 的内容保持不变,并返回一个空指针。如果发生错误,返回一个空指针。

在读字符时遇到end-of-file,则eof指示器被设置,如果还没读入任何字符就遇到这种情况,则stream保持原来的内容,返回NULL;

如果发生读入错误,error指示器被设置,返回NULL,stream的值可能被改变。


示例:

char str[100];
while (fgets(str, 10, stdin) != NULL)
{
    //数据处理
}


点赞(0)

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

Dotcpp在线编译      (登录可减少运行等待时间)