gets_getws

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 指针指示错误或文件尾条件。 使用 ferrorfeof 确定已发生哪种情况。 如果 bufferNULL,这些函数会调用无效的参数处理程序,如参数验证所述。 如果允许执行继续,则这些函数将返回 NULL 并将 errno 设置为 EINVAL

注解

gets 函数从标准输入流 stdin 中读取一个行并将该行存储在 buffer 中。 该行由第一个换行符(“\n”)之前的所有字符和该换行符构成。 随后,在返回行之前,gets 会将换行符替换为 null 字符(“\0”)。 相反,fgets 函数将保留换行符。 _getwsgets 的宽字符版本;其参数和返回值都是宽字符字符串。

重要

由于无法限制 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
fgetsfgetws
fputsfputws
puts_putws