函式
<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.


另見