[答疑解惑] C++ 中的 gets() 函数替代方案
简述
在学习 C++ 的时候,发现 gets()
函数不能直接在 C++ 环境下使用。
下述代码中,本人编写了较为简单的程序,用于输出用户输入行内的两段内容。
1 |
|
很显然,运行后出现了以下报错内容:
1 | error: ‘gets’ was not declared in this scope; did you mean ‘getw’? |
分析原因 & 解决方案
C++ 11 及以后版本中,gets()
函数已被废弃,因为其存在安全漏洞,即 gets()
函数在输入字符串时,不会检查字符串的长度,可能会导致缓冲区溢出。
因此,在 C++ 中,针对 char
类型的字符串,一般使用 fgets()
函数来代替;
fgets()
函数可以正确地检查字符串的长度,避免缓冲区溢出。
函数使用
fgets()
函数
其函数定义于 <cstdio>
头文件中,其函数原型如下:
1 | char* fgets( char* str, int count, std::FILE* stream ); |
其中的参数含义如下:
str
:用于存储读取的字符串。count
:读取的字符串的最大长度,包括字符串结束符。stream
:文件流对象。可以是stdin
、stdout
、stderr
、FILE*
类型的指针等。
使用示例
根据如上的分析与解决方案,由 【简述】 中所述的代码示例可改写成如下:
1 |
|
参考资料
- 标题: [答疑解惑] C++ 中的 gets() 函数替代方案
- 作者: CatIsNotFound
- 创建于 : 2024-12-03 20:16:06
- 更新于 : 2024-12-03 20:16:06
- 链接: https://catisnotfound.github.io/2024/12/答疑解惑-关于-gets-函数不能在C-11及以后使用的解决办法/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论