std::wcstombs
來自 cppreference.com
定義於標頭檔案 <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
|