名稱空間
變體
操作

std::wcstombs

來自 cppreference.com
< cpp‎ | string‎ | multibyte
定義於標頭檔案 <cstdlib>
std::size_t wcstombs( char* dst, const wchar_t* src, std::size_t len );

將寬字元序列(首元素由 src 指向)轉換為其窄多位元組表示,從初始移位狀態開始。轉換後的字元儲存在由 dst 指向的 char 陣列的連續元素中。寫入目標陣列的位元組數不超過 len

每個字元的轉換都如同呼叫了 std::wctomb,但 wctomb 的轉換狀態不受影響。轉換在以下情況下停止:

  • 空字元已轉換並存儲。
  • 找到一個 wchar_t,它不對應於當前 C 區域設定中的有效字元。
  • 要儲存的下一個多位元組字元將超過 len

目錄

[編輯] 注意

在大多數實現中,此函式在處理字串時會更新一個型別為 std::mbstate_t 的全域性靜態物件,並且不能由兩個執行緒同時呼叫,在這種情況下應使用 std::wcsrtombs

POSIX 規定了一個常見擴充套件:如果 dst 是空指標,則此函式返回(如果轉換)將寫入 dst 的位元組數。std::wcsrtombs 也有類似的標準行為。

[編輯] 引數

dst - 指向窄字元陣列的指標,多位元組字元將儲存在此處
src - 指向要轉換的空終止寬字串的第一個元素的指標
len - dst 指向的陣列中可用位元組數

[編輯] 返回值

成功時,返回寫入字元陣列(其首元素由 dst 指向)的位元組數(包括任何移位序列,但不包括終止符 '\0')。

轉換錯誤時(如果遇到無效寬字元),返回 static_cast<std::size_t>(-1)

[編輯] 示例

#include <clocale>
#include <cstdlib>
#include <iostream>
 
int main()
{
    std::setlocale(LC_ALL, "en_US.utf8");
    // UTF-8 narrow multibyte encoding
    const wchar_t* wstr = L"z\u00df\u6c34\U0001d10b"; // or L"zß水𝄋"
    char mbstr[11];
    std::wcstombs(mbstr, wstr, 11);
    std::cout << "multibyte string: " << mbstr << '\n';
}

輸出

multibyte string: zß水𝄋

[編輯] 另請參閱

將寬字串轉換為窄多位元組字元字串,給定狀態
(函式) [編輯]
將窄多位元組字元字串轉換為寬字串
(函式) [編輯]
[虛擬]
將字串從 InternT 轉換為 ExternT,例如寫入檔案時
(std::codecvt<InternT,ExternT,StateT> 的虛擬保護成員函式) [編輯]
C 文件 關於 wcstombs