函数
<cwchar>

vfwscanf

int vfwscanf (FILE* stream, const wchar_t* format, va_list arg);
从流中读取格式化数据到可变参数列表
stream读取数据,并根据C宽字符串format将数据存储到由arg标识的可变参数列表中的元素所指向的位置。

在内部,该函数从由 arg 标识的列表中检索参数,就像对其使用了 va_arg 一样,因此 arg 的状态很可能会因调用而改变。

无论如何,arg 应该在调用之前的某个时刻由 va_start 初始化,并且预计在调用之后的某个时刻由 va_end 释放。

文件中的宽字符的外部表示是多字节字符:这些字符的转换方式如同调用mbrtowc(使用stream的内部mbstate_t对象)。

这是vfscanf<cstdio>)的宽字符等效函数。

参数

stream
指向标识输入流的 FILE 对象的指针。
该流不应有任何朝向,或应是宽字符朝向的(对流的第一个 I/O 操作决定了它是字节朝向还是宽字符朝向,请参阅 fwide)。
format
C 语言宽字符串,包含一个格式字符串,其规范与 scanf 中的 format 相同(更多详情请参见 scanf)。
请注意,所有格式说明符的含义与 scanf 中的相同;因此,%lc应用于读取单个宽字符(而不是%c),同样%ls应用于宽字符串(而不是%s).
arg
一个标识由 va_start 初始化的可变参数列表的值。
va_list 是在 <cstdarg> 中定义的特殊类型。

返回值

成功时,函数返回成功填充的参数列表项的数量。由于匹配失败、读取错误或到达文件结尾,该计数可能与预期的项数相符,也可能更少(甚至为零)。

如果发生读取错误或在读取过程中到达文件尾,则会设置相应的指示符(feofferror)。如果其中任何一个在成功读取任何数据之前发生,则返回EOF

如果在解释宽字符时发生编码错误,函数会设置 errnoEILSEQ.

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
/* vfwscanf example */
#include <stdio.h>
#include <stdarg.h>
#include <wchar.h>

void ReadWideStuff (FILE * stream, const wchar_t * format, ...)
{
  va_list args;
  va_start (args, format);
  vfwscanf (stream, format, args);
  va_end (args);
}

int main ()
{
  FILE * pFile;
  int val;
  wchar_t str[100];

  pFile = fopen ("myfile.txt","r");

  if (pFile!=NULL) {
    ReadWideStuff ( pFile, L" %ls %d ", str, &val );
    wprintf (L"I have read %ls and %d", str, val);
    fclose (pFile);
  }

  return 0;
}

另见