Dotcpp  >  编程教程  >  经验与技巧  >  为什么gets函数不能用了?

为什么gets函数不能用了?

点击打开在线编译器,边学边练

在提交问题时,不少接收字符串的时候可以用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)
{
    //数据处理
}



本文固定URL:https://www.dotcpp.com/course/868

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