函数
<cwchar>

vswprintf

int vswprintf (wchar_t * ws, size_t len, const wchar_t * format, va_list arg );
将可变参数列表中的格式化数据写入指定大小的缓冲区
该函数会组合一个字符串,其文本与在wprintf中使用format时打印的文本相同,但它使用由arg标识的可变参数列表中的元素,而不是额外的函数参数,并将结果内容作为C宽字符串存储在由ws指向的缓冲区中(以len作为要填充的最大缓冲区容量,以宽字符表示)。

如果结果字符串的长度超过n-1个宽字符,则多余的字符将被丢弃,不予存储。

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

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

这是 vsnprintf (<cstdio>) 的宽字符版本。

参数

ws
指向存储结果C宽字符串的缓冲区的指针。
该缓冲区的大小应至少为len个宽字符。
len
要写入缓冲区的最大宽字符数。
生成的字符串长度最多为n-1,为额外的终止空宽字符留出空间。
size_t 是一个无符号整数类型。
format
C 宽字符串,包含一个格式字符串,其遵循与 printfformat 相同的规范(详情请参阅 printf)。
请注意,所有格式说明符的含义与 printf 中相同;因此,%lc应用于写入一个宽字符(而不是%c),同样%ls应用于宽字符串(而不是%s).
arg
一个标识由 va_start 初始化的可变参数列表的值。
va_list 是在 <cstdarg> 中定义的特殊类型。

返回值

成功时,返回写入的字符总数。此计数不包括在字符串末尾自动追加的空字符。
如果发生错误,则返回一个负数,包括当要写入ws的结果字符串长度超过n个字符时。

示例

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

void PrintWide ( const wchar_t * format, ... )
{
  wchar_t buffer[256];
  va_list args;
  va_start ( args, format );
  vswprintf ( buffer, 256, format, args );
  fputws ( buffer, stdout );
  va_end ( args );
}

int main ()
{
   wchar_t str[] = L"test string has %d wide characters.\n";

   PrintWide ( str, wcslen(str) );

   return 0;
}

可能的输出
test string has 36 wide characters.


另见