std::mbsrtowcs
來自 cppreference.com
在標頭檔案 <cwchar> 中定義 |
||
std::size_t mbsrtowcs( wchar_t* dst, const char** src, |
||
將從 *src 指向的陣列首元素開始、以 *ps 描述的轉換狀態開始的多位元組字元空終止序列,轉換為寬字元表示。如果 dst 不為 null,則轉換後的字元儲存在 dst 指向的 wchar_t 陣列的連續元素中。寫入目標陣列的寬字元不超過 len 個。
每個多位元組字元都像透過呼叫 std::mbrtowc 轉換一樣。如果出現以下情況,轉換將停止:
- 多位元組空字元已轉換並存儲。src 被設定為空指標,而
*ps
表示初始移位狀態。 - 遇到無效的多位元組字元(根據當前 C 語言環境)。src 被設定為指向第一個未轉換多位元組字元的開頭。
- 要儲存的下一個寬字元將超過 len。src 被設定為指向第一個未轉換多位元組字元的開頭。如果 dst 為空指標,則不檢查此條件。
目錄 |
[編輯] 引數
dst | - | 指向寬字元陣列的指標,結果將儲存在此處 |
src | - | 指向空終止多位元組字串第一個元素的指標的指標 |
len | - | dst指向的陣列中可用的寬字元數 |
ps | - | 指向轉換狀態物件的指標 |
[編輯] 返回值
成功時,返回寫入字元陣列的寬字元數,不包括終止符 L'\0'。如果 dst 是空指標,則返回在長度無限制的情況下會寫入的寬字元數。
在轉換錯誤(如果遇到無效多位元組字元)時,返回 static_cast<std::size_t>(-1),將 EILSEQ 儲存在 errno 中,並使 *ps 處於未指定狀態。
[編輯] 注意
此函式將 src 指標移動到已轉換多位元組字串的末尾。如果 dst 為空指標,則不會發生這種情況。
[編輯] 示例
執行此程式碼
#include <clocale> #include <cwchar> #include <iostream> #include <vector> void print_as_wide(const char* mbstr) { std::mbstate_t state = std::mbstate_t(); std::size_t len = 1 + std::mbsrtowcs(nullptr, &mbstr, 0, &state); std::vector<wchar_t> wstr(len); std::mbsrtowcs(&wstr[0], &mbstr, wstr.size(), &state); std::wcout << "Wide string: " << &wstr[0] << '\n' << "The length, including '\\0': " << wstr.size() << '\n'; } int main() { std::setlocale(LC_ALL, "en_US.utf8"); const char* mbstr = "z\u00df\u6c34\U0001f34c"; // or u8"zß水🍌" print_as_wide(mbstr); }
輸出
Wide string: zß水🍌 The length, including '\0': 5
[編輯] 另請參閱
將下一個多位元組字元轉換為寬字元,給定狀態 (函式) | |
將寬字串轉換為窄多位元組字元字串,給定狀態 (函式) | |
[virtual] |
將字串從 ExternT 轉換為 InternT ,例如從檔案讀取時( std::codecvt<InternT,ExternT,StateT> 的虛保護成員函式) |
C 文件 針對 mbsrtowcs
|