gets_s_getws_s

stdin 流中获取行。 这些版本的 gets_getws 具有安全增强功能,如 CRT 中的安全功能中所述。

语法

char *gets_s(
   char *buffer,
   size_t sizeInCharacters
);
wchar_t *_getws_s(
   wchar_t *buffer,
   size_t sizeInCharacters
);
template <size_t size>
char *gets_s( char (&buffer)[size] ); // C++ only

template <size_t size>
wchar_t *_getws_s( wchar_t (&buffer)[size] ); // C++ only

参数

buffer
输入字符串的存储位置。

sizeInCharacters
缓冲区的大小。

返回值

如果成功,则返回 bufferNULL 指针指示错误或文件尾条件。 使用 ferrorfeof 确定已发生哪种情况。

备注

gets_s 函数从标准输入流 stdin 中读取一个行并将该行存储在 buffer 中。 该行由第一个换行符(“\n”)之前的所有字符和该换行符构成。 随后,在返回行之前,gets_s 会将换行符替换为 null 字符(“\0”)。 相反,fgets_s 函数将保留换行符。

如果读取的第一个字符是文件尾字符,则空字符将存储在 buffer 的开头,并返回 NULL

_getws_sgets_s 的宽字符版本;其参数和返回值都是宽字符字符串。

如果 bufferNULLsizeInCharacters 小于或等于零,或者如果缓冲区太小,无法包含输入行和 null 终止符,这些函数将调用无效参数处理程序,如参数验证中所述。 如果允许执行继续,则这些函数返回 NULL 并将 errno 设置为 ERANGE

在 C++ 中,使用这些函数由模板重载简化;重载可以自动推导出缓冲区长度 (不再需要指定大小自变量),并且它们可以自动用以更新、更安全的对应物替换旧的、不安全的函数。 有关详细信息,请参阅安全模板重载

默认情况下,此函数的全局状态范围限定为应用程序。 若要更改此行为,请参阅 CRT 中的全局状态

一般文本例程映射

TCHAR.H 例程 _UNICODE_MBCS 未定义 _MBCS 已定义 _UNICODE 已定义
_getts_s gets_s gets_s _getws_s

要求

例程 必需的标头
gets_s <stdio.h>
_getws_s <stdio.h><wchar.h>

通用 Windows 平台 (UWP) 应用中不支持控制台。 与控制台、stdinstdoutstderr 关联的标准流句柄必须重定向,然后 C 运行时函数才能在 UWP 应用中使用它们。 有关兼容性的详细信息,请参阅 兼容性

示例

// crt_gets_s.c
// This program retrieves a string from the stdin and
// prints the same string to the console.

#include <stdio.h>

int main( void )
{
   char line[21]; // room for 20 chars + '\0'
   gets_s( line, 20 );
   printf( "The line entered was: %s\n", line );
}
Hello there!
The line entered was: Hello there!

另请参阅

流 I/O
gets_getws
fgetsfgetws
fputsfputws
puts_putws