函数
<cwchar>

vwprintf

int vwprintf (const wchar_t* format, va_list arg);
从可变参数列表向 stdout 打印格式化数据
format 指向的 C 宽字符串写入标准输出 (stdout),其替换任何格式说明符的方式与 printf 相同,但使用的是由 arg 标识的可变参数列表中的元素,而非额外的函数参数。

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

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

宽字符在stdout是多字节字符:这些字符的获得方式就如同调用 wcrtomb 来转换每个宽字符(使用的内部 mbstate_t 对象)。

这是 vprintf (<cstdio>) 的宽字符等价版本。

参数

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

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

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

   return 0;
}

输出
Call with 1 variable argument.
Call with 2 variable arguments.


另见