名稱空間
變體
操作

std::mbstowcs

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

將指向 src 的多位元組字串陣列的第一個元素轉換為其寬字元表示形式。轉換後的字元儲存在指向 dst 的陣列的連續元素中。寫入目標陣列的寬字元數不超過 len 個。

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

  • 多位元組空字元已被轉換並存儲。
  • 遇到一個無效(在當前 C 語言環境中)的多位元組字元。
  • 下一個要儲存的寬字元將超出 len

目錄

[編輯] 注意

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

POSIX 指定了一個常見擴充套件:如果 dst 是一個空指標,則此函式返回如果轉換,將寫入 dst 的寬字元數。類似的行為對於 std::mbsrtowcs 來說是標準的。

[編輯] 引數

dst - 指向將儲存寬字串的寬字元陣列的指標
src - 指向要轉換的以空字元結尾的多位元組字串的第一個元素的指標
len - dst指向的陣列中可用的寬字元數

[編輯] 返回值

成功時,返回寫入目標陣列的寬字元數,不包括終止的 L'\0'

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

[編輯] 示例

#include <clocale>
#include <cstdlib>
#include <iostream>
 
int main()
{
    std::setlocale(LC_ALL, "en_US.utf8");
    std::wcout.imbue(std::locale("en_US.utf8"));
    const char* mbstr = "z\u00df\u6c34\U0001f34c"; // or u8"zß水🍌"
                        // or "\x7a\xc3\x9f\xe6\xb0\xb4\xf0\x9f\x8d\x8c";
    wchar_t wstr[5];
    std::mbstowcs(wstr, mbstr, 5);
    std::wcout << "wide string: " << wstr << '\n';
}

輸出

wide string: zß水🍌

[編輯] 另請參閱

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