vwscanf, vfwscanf, vswscanf, vwscanf_s, vfwscanf_s, vswscanf_s
| 定义于头文件 <wchar.h>
|
||
int vwscanf( const wchar_t *restrict format, va_list vlist );
|
(1) | (自C99起) |
int vfwscanf( FILE *restrict stream,
const wchar_t *restrict format, va_list vlist );
|
(2) | (自C99起) |
int vswscanf( const wchar_t *restrict buffer,
const wchar_t *restrict format, va_list vlist );
|
(3) | (自C99起) |
int vwscanf_s( const wchar_t *restrict format, va_list vlist );
|
(4) | (自C11起) |
int vfwscanf_s( FILE *restrict stream,
const wchar_t *restrict format, va_list vlist );
|
(5) | (自C11起) |
int vswscanf_s( const wchar_t *restrict buffer,
const wchar_t *restrict format, va_list vlist );
|
(6) | (自C11起) |
从多种来源读取数据,根据 format 进行解释,并将结果存储到 vlist 所定义的位置。
stream 读取数据。buffer 读取数据。到达字符串末尾等价于达到 fwscanf%c 相同,但 %s、%[ 和 转换说明符各需两个参数(通常的指针和一个 rsize_t 类型的值,指示接收数组的大小,当使用 %lc 读取单个宽字符时该值可为 1),并且在运行时检测以下错误,并调用当前安装的 约束处理器- 函数:
format任何指针类型的参数为空指针stream,buffer或- 为空指针 %c、%s 或
- %[ 将写入的字符数(加上终止空字符)会超出为这些转换说明符提供的第二个(rsize_t)参数
- 可选地,任何其他可检测到的错误,例如未知的转换说明符
vwscanf_s与所有边界检查函数一样,vfwscanf_s、vswscanf_s和__STDC_LIB_EXT1__只有在实现定义了__STDC_WANT_LIB_EXT1__,并且用户在包含1stdio.h< 之前将 > 定义为整数常量
参见
| 参数 | stream | - |
| 要读取的输入文件流 | buffer | - |
| 指向要读取的空终止宽字符串的指针 | format | - |
| 指向空终止宽字符串的指针,指定如何读取输入 | vlist | - |
包含接收参数的变量参数列表。
format
- 字符串由以下部分组成:
%非空白宽字符( - 除外):格式字符串中的每个此类字符精确消耗输入流中的一个相同字符,如果流中的下一个字符不相等则导致函数失败。空白字符:格式字符串中的任何单个空白字符消耗输入中的所有连续空白字符(如同通过循环调用 iswspace
"\n"确定)。注意" "、"\t\t"、 - 或格式字符串中的其他空白字符之间没有区别。
- 转换说明。每个转换说明具有以下格式:
%起始的
- 转换说明。每个转换说明具有以下格式:
- 字符。(可选)
*赋值抑制字符
- 字符。(可选)
- 。如果存在此选项,函数不将转换结果赋给任何接收参数。(可选) 指定 最大字段宽度
%s的整数(大于零),即函数在当前转换说明指定的转换中允许消耗的最大字符数。注意%[和
- 。如果存在此选项,函数不将转换结果赋给任何接收参数。(可选) 指定 最大字段宽度
- 若未提供宽度可能导致缓冲区溢出。 (可选)长度修饰符
- ,指定接收参数的大小,即实际目标类型。这影响转换精度和溢出规则。默认目标类型因转换类型而异(见下表)。
转换格式说明符。
| 可用的格式说明符如下:
转换 |
说明符 | 说明
期望的 | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|
| 参数类型 | hh
|
h
|
长度修饰符→ | l
|
ll
|
j
|
z
|
t
|
L
| |
| 无 | 仅自C99起可用→ | 是 | 是 | 是 | 是 | |||||
%
|
是
%匹配文字 |
。 | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A |
c
|
N/A匹配一个 字符或一个 字符
|
%[ 不同,不会向数组附加空字符。 | N/A | char* |
wchar_t* |
N/A | N/A | N/A | N/A | N/A |
s
|
N/A匹配非空白字符序列(一个 字符串
| |||||||||
[ 个字符)。 ]
|
set匹配来自字符 集合
| |||||||||
d
|
个字符)。匹配一个 十进制整数
|
signed char* 时预期的格式相同。unsigned char* |
signed short* 或 unsigned short* |
signed int* 或 unsigned int* |
signed long* 或 unsigned long* |
signed long long* 或 unsigned long long* |
intmax_t* 或 uintmax_t* |
size_t* |
ptrdiff_t* |
或 |
b N/A
|
(C23)匹配一个无符号 二进制整数
| |||||||||
i
|
时预期的格式相同。匹配一个 整数
| |||||||||
u
|
时预期的格式相同(基数由解析的首个字符决定)。匹配一个无符号 十进制整数
| |||||||||
o
|
时预期的格式相同。匹配一个无符号 八进制整数
| |||||||||
xX
|
时预期的格式相同。匹配一个无符号 十六进制整数
| |||||||||
n
|
时预期的格式相同。返回 迄今为止读取的字符数
| |||||||||
a 如果说明符定义了赋值抑制操作符,行为未定义。A (C99)eEfF (C99)gG
|
匹配一个 浮点数。
|
N/A | N/A | float* |
double* |
N/A | N/A | N/A | N/A | long double* |
p
|
匹配实现定义的字符序列,该序列定义一个 指针。
|
N/A | N/A | void** |
N/A | N/A | N/A | N/A | N/A | N/A |
| 注解 | ||||||||||
|
对于除 除 除 如果未使用长度说明符 转换说明符 用于 定宽整数类型(int8_t 等)的正确转换说明符定义在头文件 <inttypes.h> 中(尽管 SCNdMAX、SCNuMAX 等与 每个转换说明符的动作之后都有一个序列点;这允许将多个字段存储到同一个“接收”变量中。 当解析一个不完整的浮点数值(例如以指数结束且没有数字)时,如使用转换说明符 如果转换说明无效,则行为未定义。 | ||||||||||
返回值
注解
所有这些函数都可能调用 va_arg,返回后 arg 的值不确定。这些函数不会调用 va_end,必须由调用者完成。
示例
| 本节未完成 原因:无示例 |
参考文献
- C11 标准(ISO/IEC 9899:2011):
- 7.29.2.6 vfwscanf 函数(第 418 页)
- 7.29.2.8 vswscanf 函数(第 419 页)
- 7.29.2.10 vwscanf 函数(第 420 页)
- K.3.9.1.7 vfwscanf_s 函数(第 632-633 页)
- K.3.9.1.10 vswscanf_s 函数(第 635-636 页)
- K.3.9.1.12 vwscanf_s 函数(第 637 页)
- C99 标准(ISO/IEC 9899:1999):
- 7.24.2.6 vfwscanf 函数(第 364 页)
- 7.24.2.8 vswscanf 函数(第 365 页)
- 7.24.2.10 vwscanf 函数(第 366 页)
参见
(C95)(C95)(C95)(C11)(C11)(C11) |
从 stdin、文件流或缓冲区读取格式化的宽字符输入 (函数) |
C++ 文档 关于 vwscanf、vfwscanf、vswscanf
| |