%>
从 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
缓冲区的大小。
返回值
如果成功,则返回 buffer
。 NULL
指针指示错误或文件尾条件。 使用 ferror
或 feof
确定已发生哪种情况。
备注
gets_s
函数从标准输入流 stdin
中读取一个行并将该行存储在 buffer
中。 该行由第一个换行符(“\n
”)之前的所有字符和该换行符构成。 随后,在返回行之前,gets_s
会将换行符替换为 null 字符(“\0
”)。 相反,fgets_s
函数将保留换行符。
如果读取的第一个字符是文件尾字符,则空字符将存储在 buffer
的开头,并返回 NULL
。
_getws_s
是 gets_s
的宽字符版本;其参数和返回值都是宽字符字符串。
如果 buffer
为 NULL
或 sizeInCharacters
小于或等于零,或者如果缓冲区太小,无法包含输入行和 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) 应用中不支持控制台。 与控制台、stdin
、stdout
和 stderr
关联的标准流句柄必须重定向,然后 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
%>
%>
%>
%>