从控制台读取格式数据。 这些更安全版本的 _cscanf
、_cscanf_l
、_cwscanf
、_cwscanf_l
具有安全增强功能,如 CRT 中的安全功能中所述。
重要
此 API 不能用于在 Windows 运行时中执行的应用程序。 有关详细信息,请参阅通用 Windows 平台应用中不支持的 CRT 函数。
语法
int _cscanf_s(
const char *format [,
argument] ...
);
int _cscanf_s_l(
const char *format,
_locale_t locale [,
argument] ...
);
int _cwscanf_s(
const wchar_t *format [,
argument] ...
);
int _cwscanf_s_l(
const wchar_t *format,
_locale_t locale [,
argument] ...
);
参数
format
窗体控件字符串。
argument
可选参数。
locale
要使用的区域设置。
返回值
已成功转换和分配的字段数。 返回值不包括已读取但未分配的字段。 返回值为尝试在文件结尾读取的 EOF
。 在操作系统命令行级别重定向键盘输入时,也可能返回 EOF
。 返回值为零表示没有分配任何字段。
这些函数验证其参数。 如果 format
为空指针,则这些函数将调用无效的参数处理程序,如参数验证中所述。 如果允许执行继续,则这些函数将返回 EOF
并将 errno
设置为 EINVAL
。
备注
_cscanf_s
函数直接将数据从控制台读取到 argument
给定的位置。 _getche
函数用于读取字符。 每个可选参数都必须为指向类型的变量的指针,该类型与 format
中的类型说明符对应。 格式控制输入字段的解释,其形式和功能与 scanf_s
函数的 format
参数相同。 虽然 _cscanf_s
通常回显输入字符,但如果最后一次调用的是 _ungetch
,则不会执行此操作。
与 scanf
系列中的其他安全版本的函数一样,_cscanf_s
和 _cwscanf_s
要求提供 c、C、s、S 和 [ 类型字段字符的大小参数。 有关详细信息,请参阅 scanf 宽度规范。
注意
大小参数的类型具有 unsigned
,而不具有 size_t
。
这些带有 _l
后缀的函数的版本相同,只不过它们使用传递的区域设置参数而不是当前线程区域设置。
一般文本例程映射
TCHAR.H 例程 | _UNICODE 和 _MBCS 未定义 |
_MBCS 已定义 |
_UNICODE 已定义 |
---|---|---|---|
_tcscanf_s |
_cscanf_s |
_cscanf_s |
_cwscanf_s |
_tcscanf_s_l |
_cscanf_s_l |
_cscanf_s_l |
_cwscanf_s_l |
要求
例程 | 必需的标头 |
---|---|
%> | <conio.h> |
%> | <conio.h> 或 <wchar.h> |
有关兼容性的详细信息,请参阅 兼容性。
库
C 运行时库的所有版本。
示例
// crt_cscanf_s.c
// compile with: /c
/* This program prompts for a string
* and uses _cscanf_s to read in the response.
* Then _cscanf_s returns the number of items
* matched, and the program displays that number.
*/
#include <stdio.h>
#include <conio.h>
int main( void )
{
int result, n[3];
int i;
result = _cscanf_s( "%i %i %i", &n[0], &n[1], &n[2] );
_cprintf_s( "\r\nYou entered " );
for( i=0; i<result; i++ )
_cprintf_s( "%i ", n[i] );
_cprintf_s( "\r\n" );
}
1 2 3
You entered 1 2 3