_cgets_s_cgetws_s

从控制台获取字符串。 这些版本的 _cgets_cgetws 具有安全增强功能,如 CRT 中的安全功能中所述。

重要

此 API 不能用于在 Windows 运行时中执行的应用程序。 有关详细信息,请参阅通用 Windows 平台应用中不支持的 CRT 函数

语法

errno_t _cgets_s(
   char *buffer,
   size_t numberOfElements,
   size_t *pSizeRead
);
errno_t _cgetws_s(
   wchar_t *buffer
   size_t numberOfElements,
   size_t *pSizeRead
);
template <size_t size>
errno_t _cgets_s(
   char (&buffer)[size],
   size_t *pSizeRead
); // C++ only
template <size_t size>
errno_t _cgetws_s(
   wchar_t (&buffer)[size],
   size_t *pSizeRead
); // C++ only

参数

buffer
数据的存储位置。

numberOfElements
缓冲区的大小(以单字节或宽字符为单位),这也是要读取的最大字符数。

pSizeRead
实际读取的字符数。

返回值

如果成功,则返回值为零;否则,如果发生失败,则是错误代码。

错误条件

buffer numberOfElements pSizeRead 返回值 buffer 的内容
NULL any 任意 EINVAL 不适用
NULL any EINVAL 未修改
NULL any NULL EINVAL 零长度字符串

备注

_cgets_s_cgetws_s 从控制台读取字符串,然后将该字符串(带有 null 结束符)复制到 buffer_cgetws_s 是函数的宽字符版本;除了字符大小之外,这两个函数的行为相同。 要读取的字符串的最大大小作为 numberOfElements 参数传入。 此大小应包括用于终止 null 的额外字符。 读取的实际字符数置于 pSizeRead 中。

如果在操作期间或在参数验证中发生错误,则调用的参数处理程序无效,如参数验证中所述。 如果允许执行继续,会将 errno 设置为 EINVAL 并返回 EINVAL

在 C++ 中,通过模板重载可简化这些函数的使用。 重载可自动推导出缓冲区的长度,不再需要指定 size 参数。 它们也可以自动将不太安全的旧函数替换为更新、更安全的函数。 有关详细信息,请参阅安全模板重载

这些函数的调试库版本首先用 0xFE 填充缓冲区。 若要禁用此行为,请使用 _CrtSetDebugFillThreshold

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

一般文本例程映射

Tchar.h 例程 _UNICODE_MBCS 未定义 _MBCS 已定义 _UNICODE 已定义
_cgetts_s _cgets_s _cgets_s _cgetws_s

要求

例程 必需的标头
_cgets_s <conio.h>
_cgetws_s <conio.h> 或 <wchar.h>

有关兼容性的详细信息,请参阅 兼容性

另请参阅

控制台和端口 I/O
_getch_getwch