swprintf ()- 格式及寫入寬字元至緩衝區

格式

#include <wchar.h>
int swprintf(wchar_t *wcsbuffer, size_t n,
             const wchar_t *format, argument-list);

語言層次

ANSI

安全執行緒

區分語言環境

此函數的行為可能受到現行語言環境的 LC_CTYPE 及 LC_NUMERIC 種類的影響。 如果在編譯指令上指定 LOCALETYPE (*LOCALEUCS2) 或 LOCALETYPE (*LOCALEUTF) ,則行為也可能受到現行語言環境的 LC_UNI_CTYPE 及 LC_UNI_NUMERIC 種類的影響。 在編譯指令上指定 LOCALETYPE (*CLD) 時,無法使用此函數。 如需相關資訊,請參閱 瞭解 CCSID 及語言環境

寬字元函數

如需相關資訊,請參閱 寬字元

說明

swprintf() 函數會將一系列寬字元及值格式化並儲存至寬字元緩衝區 wcsbufferswprintf() 函數相當於 sprintf() 函數,但它是在寬字元上運作。

n 指定要寫入的寬字元數上限,包括結尾空值字元。 swprintf() 函數會根據格式中對應的寬字元格式指定元,來轉換引數清單中的每一個項目。 格式與 printf() 函數的格式字串具有相同的格式及函數,但下列例外:

  • %c (不含 l 字首) 會將字元引數轉換為 wchar_t ,如同呼叫 mbtowc() 函數一樣。
  • %lc 和 %C 將 wchar_t 複製到 wchar_t。 %#lc 和%#C 分別相當於 %lc 和 %C。
  • %s (不含 l 字首) 會將多位元組字元陣列轉換為 wchar_t 陣列,如同呼叫 mbstowcs() 函數一樣。 除非精準度指定較短的輸出,否則陣列會寫入至 (但不包括) 結尾空值字元。
  • %ls 及 %S 複製 wchar_t 的陣列 (無轉換)。 除非精準度指定較短的輸出,否則陣列會寫入至 (但不包括) 結尾 NULL 字元。 %#ls 和%#S 分別相等於 %ls 和 %S。

寬度和精準度一律是寬字元。

寫入的寬字元結尾會加上空值寬字元; 空值寬字元不被視為回覆值的一部分。 如果在重疊的物件之間進行複製,則未定義行為。

回覆值

swprintf() 函數會傳回寫入輸出緩衝區的寬字元數,如果發生錯誤,則不計算結束空值寬字元或負值。 如果要求寫入 n 個以上寬字元,則會傳回負值。

errno 的值可能設為 EINVAL,無效的引數。

範例

此範例使用 swprintf() 函數將數個值格式化並列印至緩衝區。
#include <wchar.h>
#include <stdio.h>
 
#define BUF_SIZE 100
 
int main(void)
{
   wchar_t wcsbuf[BUF_SIZE];
   wchar_t wstring[] = L"ABCDE";
   int     num;
 
   num = swprintf(wcsbuf, BUF_SIZE, L"%s", "xyz");
   num += swprintf(wcsbuf + num, BUF_SIZE - num, L"%ls", wstring);
   num += swprintf(wcsbuf + num, BUF_SIZE - num, L"%i", 100);
   printf("The array wcsbuf contains: \"%ls\"\n", wcsbuf);
   return 0;
 
   /***************************************************************
      The output should be similar to :
 
      The array wcsbuf contains: "xyzABCDE100"
   ***************************************************************/
}

相關資訊