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
   ************************************************************/

相關資訊