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() 函數會將一系列寬字元及值格式化並儲存至寬字元緩衝區 wcsbuffer。 swprintf() 函數相當於 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"
***************************************************************/
}