gets, _getws
获取 stdin 流的一行。 这些功能的更安全版本可用;请参见 gets_s, _getws_s。
重要
此 API 不能在运行时的窗口执行的应用程序。有关更多信息,请参见 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 函数在 buffer读取标准输入流 stdin 的一行并将其存储。 行包含所有字符模式将匹配第一个换行符 (“\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 个字符的长度将超出行缓冲区和几乎可以肯定会导致程序失败。