gets, gets_s
|
定义于头文件
<stdio.h>
|
||
|
char
*
gets
(
char
*
str
)
;
|
(1) | (C11 中移除) |
|
char
*
gets_s
(
char
*
str, rsize_t n
)
;
|
(2) | (C11 起) |
- n 为零;
- n 大于 RSIZE_MAX ;
- str 是空指针;
- 在向缓冲区存储 n - 1 个字符后未遇到 endline 或 eof 。
gets_s
可用。
目录 |
参数
| str | - | 要写入从 stdin 读取的字符的字符数组 |
| n | - | 可写入 str 所指向数组的最大字符数 |
返回值
str 成功时返回字符串指针,失败时返回空指针。
若失败由文件结束条件引起,则额外设置 eof 指示器(参见 feof() )于 stdin 。若失败由其他错误引起,则设置 error 指示器(参见 ferror() )于 stdin 。
注释
gets()
函数不执行边界检查,因此该函数极易受到缓冲区溢出攻击。除非程序运行在可限制
stdin
输入内容的环境中,否则无法安全使用此函数。基于此原因,该函数在 C99 标准的第三次勘误中已被弃用,并在 C11 标准中被完全移除。
fgets()
和
gets_s()
是推荐的替代方案。
警告:切勿使用
gets()
。
参考文献
- C23 标准 (ISO/IEC 9899:2024):
-
- K.3.5.4.1 gets_s 函数 (页: TBD)
- C17 标准 (ISO/IEC 9899:2018):
-
- K.3.5.4.1 gets_s 函数 (页: TBD)
- C11 标准 (ISO/IEC 9899:2011):
-
- K.3.5.4.1 gets_s 函数 (页: 602-603)
- C99标准(ISO/IEC 9899:1999):
-
- 7.19.7.7 gets函数(页码:298)
- C89/C90 标准 (ISO/IEC 9899:1990):
-
- 4.9.7.7 gets 函数
参考
|
(C11)
(C11)
(C11)
|
从
stdin
、文件流或缓冲区读取格式化输入
(函数) |
|
从文件流获取字符串
(函数) |
|
|
向文件流写入字符串
(函数) |
|
|
(动态内存 TR)
|
从流读取数据到自动调整大小的缓冲区,直至遇到分隔符/行结束符
(函数) |
|
C++ 文档
关于
gets
|
|