gets、_getws
从 stdin 流获取线。 有关这些函数的更多安全版本,请参见 gets_s、_getws_s。
重要
此 API 不能用于在 Windows 运行时中执行的应用程序。有关详细信息,请参见 CRT functions not supported with /ZW(CRT 函数不支持使用/ZW)。
char *gets(
char *buffer
);
wchar_t *_getws(
wchar_t *buffer
);
template <size_t size>
char *gets(
char (&buffer)[size]
); // C++ only
template <size_t size>
wchar_t *_getws(
wchar_t (&buffer)[size]
); // C++ only
参数
- buffer
输入字符串的存储位置。
返回值
如果成功,翻译其参数。 NULL 指针指向错误或文件结尾条件。 使用 ferror 或 feof 确定哪个已发生。 如果 buffer 是NULL, 则函数调用无效参数处理程序, 如 参数验证所述. 如果允许执行继续,则这些函数返回 NULL 并将 errno 设置为EINVAL 。
备注
gets 函数从标准输入流 stdin 中读取一行并保存在 buffer中. 行包含所有字符模式将匹配第一个换行符 (“\n”)。 gets 在返回行之前使用 null 字符 (“\0 ")然后替换换行符。 相反,fgets 函数保留换行符。 _getws 是 gets 的宽字符版本, 参数和的返回值都是宽字符字符串。
安全说明 |
---|
由于没有办法限制读取的字符数的数量,不受信任的输入很容易导致缓冲区溢出。请改用 fgets。 |
在 C++ 中,这些函数具有模板重载,以调用这些函数的更新、更安全副本。 有关详细信息,请参阅安全模板重载。
一般文本例程映射
TCHAR.H 例程 |
未定义 _UNICODE & _MBCS |
已定义 _MBCS |
已定义 _UNICODE |
---|---|---|---|
_getts |
gets |
gets |
_getws |
要求
例程 |
必需的标头 |
---|---|
gets |
<stdio.h> |
_getws |
<stdio.h> 或 <wchar.h> |
有关兼容性的更多信息,请参见兼容性。
示例
// crt_gets.c
// compile with: /WX /W3
#include <stdio.h>
int main( void )
{
char line[21]; // room for 20 chars + '\0'
gets( line ); // C4996
// Danger: No way to limit input to 20 chars.
// Consider using gets_s instead.
printf( "The line entered was: %s\n", line );
}
请注意输入超过 20 个字符的长度将超出行缓冲区并且很可以会导致程序崩溃。