當前位置: 首頁>>編程示例 >>用法及示例精選 >>正文


C++ vswprintf()用法及代碼示例

C++ 中的vswprintf() 函數用於將格式化的寬字符串寫入寬字符串緩衝區。

vswprintf() 函數在<cwchar> 頭文件中定義。

vswprintf()原型

int vswprintf( wchar_t* buffer, size_t buf_size, const wchar_t* format, va_list vlist );

vswprintf() 函數將 format 指向的寬字符串寫入寬字符串 buffer 。最多將 (buf_size-1) 寬字符寫入緩衝區,然後是空寬字符。

寬字符串 format 可能包含以 % 開頭的格式說明符,這些說明符被作為列表 vlist 傳遞的變量的值替換。

參數:

  • buffer:指向寬字符串緩衝區以寫入結果的指針。
  • buf_size:要寫入的最大寬字符數,包括終止的空寬字符。
  • format:指向寫入緩衝區的空終止寬字符串的指針。它由字符以及以 % 開頭的可選格式說明符組成。格式說明符由遵循格式的各個變量的值替換。
    格式說明符包含以下部分:
    • 前導 % 符號
    • 標誌:可選的一個或多個標誌,用於修改轉換行為。
      • -:左對齊字段內的結果。默認情況下它是右對齊的。
      • +:結果的符號附加到值的開頭,即使是正麵結果也是如此。
      • 空格:如果沒有符號,則在結果的開頭附加一個空格。
      • #:執行另一種形式的轉換。
      • 0:用於整數和浮點數。前導零用於填充數字而不是空格。
    • 寬度:可選的 * 或整數值,用於指定最小寬度字段。
    • 精度:一個可選字段,由 .後跟 * 或整數或不指定精度。
    • 長度:一個可選的長度修飾符,指定參數的大小。
    • 說明符:轉換格式說明符。可用的格式說明符如下:
    格式說明符
    格式說明符 說明
    % 印刷 %
    c 寫入單個字符
    s 寫入一個字符串
    d 或 i 將有符號整數轉換為十進製表示
    o 將無符號整數轉換為八進製表示
    X 或 x 將無符號整數轉換為十六進製表示
    u 將無符號整數轉換為十進製表示
    F 或 f 將浮點數轉換為十進製表示
    E 或 e 將浮點數轉換為十進製 index 表示法
    一個或一個 將浮點數轉換為十六進製 index
    克或克 將浮點數轉換為十進製或十進製 index 表示法
    n 返回到目前為止此函數調用寫入的字符數。結果寫入參數指向的值
    p 編寫定義指針的實現定義的字符序列。

    所以格式說明符的一般格式是:
    %[flags][width][.precision][length]specifier
  • vlist :包含要寫入的數據的參數列表。

返回:

  • 如果成功,vswprintf() 函數會返回寫入的寬字符數,不包括終止的空寬字符。
  • 如果發生任何編碼錯誤或要生成的字符數等於或大於buf_size,則返回負值。

示例:vswprintf() 函數如何工作?

#include <cwchar>
#include <cstdarg>
#include <clocale>

void write(wchar_t* buffer, size_t buf_size, const wchar_t *fmt, ...)
{
	va_list args;
	va_start(args, fmt);
	vswprintf(buffer, buf_size, fmt, args);
	va_end(args);
}

int main ()
{
	wchar_t str[] = L"\u0684 \u06b1 \u06aa \u06a3 \u0684";
	wchar_t buffer[50];

	setlocale(LC_ALL, "en_US.UTF-8");

	write(buffer, 50, L"Arabic Letters: %ls\n", str);
	wprintf(L"%ls", buffer);

	return 0;
}

運行程序時,以下內容將寫入 example.txt:

Arabic Letters: ڄ ڱ ڪ ڣ ڄ

相關用法


注:本文由純淨天空篩選整理自 C++ vswprintf()。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。