%>
从 stdin
流中获取行。 提供这些函数的更安全版本;请参阅 gets_s
、_getws_s
。
重要
这些函数已过时。 从 Visual Studio 2015 开始,CRT 中不再提供这些函数。 这些函数(gets_s
和 _getws_s
)的安全版本仍然可用。 有关这些备用函数的信息,请参阅 gets_s
、_getws_s
。
重要
此 API 不能用于在 Windows 运行时中执行的应用程序。 有关详细信息,请参阅通用 Windows 平台应用中不支持的 CRT 函数。
语法
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
的宽字符版本;其参数和返回值都是宽字符字符串。
重要
由于无法限制 gets
读取的字符数,因此不受信任的输入容易导致缓冲区溢出。 请改用 fgets
。
在 C++ 中,这些函数具有模板重载,以调用这些函数的更新、更安全副本。 有关详细信息,请参阅安全模板重载。
默认情况下,此函数的全局状态范围限定为应用程序。 若要更改此行为,请参阅 CRT 中的全局状态。
一般文本例程映射
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 个字符的输入将超出行缓冲区,几乎肯定会导致程序崩溃。
Hello there!The line entered was: Hello there!
另请参阅
流 I/O
%>
%>
%>