在提交问题时,不少接收字符串的时候可以用gets函数(以前确实可以),但由于get函数不提供给出足够长的输入字符串时,避免目标数组缓冲区溢出的手段。 std::gets 于 C++11 被弃用,并于 C++14 移除。
可使用 std::fgets 替代。也就是说现在只要用C++11及以后版本的标准,gets函数都不能再用了
不过,我们可以使用#define gets(S) fgets(S,sizeof(S),stdin) 作为兼容性宏替换。
附:
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