vswprintf ()- 格式及寫入寬字元至緩衝區
格式
#include <stdarg.h>
#include <wchar.h>
int vswprintf(wchar_t *wcsbuffer, size_t n, const wchar_t
*format, va_list argptr);語言層次
ANSI
安全執行緒
是
區分語言環境
此函數的行為可能受到現行語言環境的 LC_CTYPE 及 LC_NUMERIC 種類的影響。 如果在編譯指令上指定 LOCALETYPE (*LOCALEUCS2) 或 LOCALETYPE (*LOCALEUTF) ,則它也可能受到現行語言環境的 LC_UNI_CTYPE 及 LC_UNI_NUMERIC 種類的影響。 在編譯指令上指定 LOCALETYPE (*CLD) 時,無法使用此函數。 如需相關資訊,請參閱 瞭解 CCSID 及語言環境。
寬字元函數
如需相關資訊,請參閱 寬字元 。
說明
vswprintf() 函數會將一系列寬字元及值格式化並儲存在緩衝區 wcsbuffer中。 vswprintf() 函數的運作方式與 swprintf() 函數類似,不同之處在於 argptr 指向寬字元引數的清單,這些引數的號碼可能因呼叫而有所不同。 這些引數應該由每一個呼叫的 va_start 起始設定。 相反地, swprintf() 函數可以有引數清單,但當您編譯程式時,該清單中的引數數目是固定的。
值 n 指定要寫入的寬字元數上限,包括結尾空值字元。
vswprintf() 函數會根據格式中對應的寬字元格式指定元,來轉換引數清單中的每一個項目。 格式與 printf() 函數的格式字串具有相同的格式及函數,但下列例外:- %c (不含 l 字首) 會將整數引數轉換為 wchar_t ,如同呼叫
mbtowc()函數一樣。 - %lc 將 wint_t 轉換為 wchar_t。
- %s (不含 l 字首) 會將多位元組字元陣列轉換為 wchar_t 陣列,如同呼叫
mbrtowc()函數一樣。 除非精準度指定較短的輸出,否則陣列會寫入至 (但不包括) 結尾空值字元。 - %ls 寫入 wchar_t 的陣列。 除非精準度指定較短的輸出,否則陣列會寫入至 (但不包括) 結尾空值字元。
寫入的寬字元結尾會加上空值寬字元; 空值寬字元不被視為回覆值的一部分。 如果在重疊的物件之間進行複製,則未定義行為。
回覆值
vswprintf() 函數會傳回在陣列中寫入的位元組數,不計算結束空值寬字元。
範例
此範例會建立一個函數
vout() ,其採用可變數目的寬字元引數,並使用 vswprintf() 將它們列印至 wcstr。#include <stdio.h>
#include <stdarg.h>
#include <wchar.h>
wchar_t *format3 = L"%ls %d %ls";
wchar_t *format5 = L"%ls %d %ls %d %ls";
void vout(wchar_t *wcs, size_t n, wchar_t *fmt, ...)
{
va_list arg_ptr;
va_start(arg_ptr, fmt);
vswprintf(wcs, n, fmt, arg_ptr);
va_end(arg_ptr);
return;
}
int main(void)
{
wchar_t wcstr[100];
vout(wcstr, 100, format3, L"ONE", 2L, L"THREE");
printf("%ls\n", wcstr);
vout(wcstr, 100, format5, L"ONE", 2L, L"THREE", 4L, L"FIVE");
printf("%ls\n", wcstr);
return 0;
}
/************************************************************
The output should be similar to:
ONE 2 THREE
ONE 2 THREE 4 FIVE
************************************************************/