函数
<cwchar>

vfwprintf

int vfwprintf (FILE* stream, const wchar_t* format, va_list arg);
从变长参数列表向流写入格式化数据
将由 format 指向的 C 宽字符串写入 stream,并以与 printf 相同的方式替换任何 format specifier,但使用由 arg 标识的变长参数列表中的元素,而不是额外的函数参数。

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

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

文件中宽字符的外部表示形式是多字节字符:这些字符的获取方式就好像调用了 wcrtomb 来转换每个宽字符(使用 stream 的内部 mbstate_t 对象)。

这是 vfprintf(位于 <cstdio>)的 宽字符 等效函数。

参数

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

返回值

成功时,返回写入的字符总数。

如果发生写入错误,则会设置错误指示符ferror)并返回一个负数。

如果在写入宽字符时发生多字节字符编码错误,errno 会被设置为EILSEQ并返回一个负数。

示例

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
/* vfprintf example */
#include <stdio.h>
#include <stdarg.h>
#include <wchar.h>

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

int main ()
{
   FILE * pFile;

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

   WriteWideFormatted (pFile,L"Call with %d variable argument.\n",1);
   WriteWideFormatted (pFile,L"Call with %d variable %ls.\n",2,L"arguments");

   fclose (pFile);

   return 0;
}

此示例演示了WriteWideFormatted可以用不同数量的参数来调用,这些参数又会传递给vfwprintf函数。
myfile.txt将包含

myfile.txt
Call with 1 variable argument. 
Call with 2 variable arguments.

另见