std::wcsrtombs
來自 cppreference.com
在標頭檔案 <cwchar> 中定義 |
||
std::size_t wcsrtombs( char* dst, const wchar_t** src, |
||
將寬字元序列(其第一個元素由 *src 指向)轉換為窄多位元組表示,該表示以 *ps 描述的轉換狀態開始。如果 dst 不為空,則轉換後的字元儲存在由 dst 指向的 char 陣列的連續元素中。寫入目標陣列的位元組數不超過 len。
每個字元的轉換都如同呼叫了 std::wcrtomb。轉換在以下情況停止:
- 已轉換並存儲了空字元。src 被設定為空指標,*ps 表示初始移位狀態。
- 找到一個 wchar_t,它不對應於當前 C 語言環境中的有效字元。src 被設定為指向第一個未轉換的寬字元。
- 要儲存的下一個多位元組字元將超過 len。src 被設定為指向第一個未轉換的寬字元。如果 dst 是空指標,則不檢查此條件。
目錄 |
[編輯] 引數
dst | - | 指向窄字元陣列的指標,多位元組字元將儲存在該陣列中 |
src | - | 指向以空字元結尾的寬字串的第一個元素的指標的指標 |
len | - | dst 指向的陣列中可用的位元組數 |
ps | - | 指向轉換狀態物件的指標 |
[編輯] 返回值
成功時,返回寫入到其第一個元素由 dst 指向的字元陣列的位元組數(包括任何移位序列,但不包括終止空字元 '\0')。如果 dst 為空指標,則返回本應寫入的位元組數(同樣不包括終止空字元 '\0')。
在轉換錯誤時(如果遇到無效的寬字元),返回 static_cast<std::size_t>(-1),將 EILSEQ 儲存在 errno 中,並使 *ps 處於未指定狀態。
[編輯] 示例
執行此程式碼
#include <clocale> #include <cwchar> #include <iostream> #include <string> #include <vector> void print_wide(const wchar_t* wstr) { std::mbstate_t state = std::mbstate_t(); std::size_t len = 1 + std::wcsrtombs(nullptr, &wstr, 0, &state); std::vector<char> mbstr(len); std::wcsrtombs(&mbstr[0], &wstr, mbstr.size(), &state); std::cout << "multibyte string: " << &mbstr[0] << '\n' << "Length, including '\\0': " << mbstr.size() << '\n'; } 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ß水𝄋" print_wide(wstr); }
輸出
multibyte string: zß水𝄋 Length, including '\0': 11
[編輯] 另請參閱
將寬字元轉換為其多位元組表示,給定狀態 (函式) | |
將窄多位元組字元字串轉換為寬字串,給定狀態 (函式) | |
[虛擬函式] |
將字串從 InternT 轉換為 ExternT ,例如寫入檔案時( std::codecvt<InternT,ExternT,StateT> 的虛保護成員函式) |
wcsrtombs 的 C 文件
|