std::wcsrtombs
提供: cppreference.com
<tbody>
</tbody>
| ヘッダ <cwchar> で定義
|
||
std::size_t wcsrtombs( char* dst, const wchar_t** src, std::size_t len, std::mbstate_t* ps ); |
||
ワイド文字シーケンスを *src によって最初の要素が指されている配列から *ps の表す変換状態で始まるナローマルチバイト表現に変換します。 dst がヌルでなければ、変換された文字が dst の指す文字配列の連続する要素に格納されます。 最大 len バイトが dst 配列に書き込まれます。
各文字は std::wcrtomb を呼んだかのように変換されます。 変換は以下の場合に停止します。
- ヌル文字が変換され格納された。
srcは NULL に設定され、*psは初期シフト状態を表すように設定されます。 - 現在の C のロケールにおいて有効な文字に対応しない
wchar_tが見つかった。srcは変換されなかった最初のワイド文字を指すように設定されます。 - 格納される次のマルチバイト文字が
lenを超える。srcは変換されなかった最初のワイド文字を指すように設定されます。 この条件はdst==NULLの場合はチェックされません。
引数
| dst | - | マルチバイト文字が格納されるナロー文字配列を指すポインタ |
| src | - | ヌル終端ワイド文字列の最初の要素を指すポインタへのポインタ |
| len | - | dst の指す配列内の利用可能なバイト数
|
| ps | - | 変換状態オブジェクトを指すポインタ |
戻り値
成功した場合は、最初の要素が dst によって指されている文字配列に書き込まれたバイト数 (あらゆるシフトシーケンスを含み、終端の '\0' を含まない) を返します。 dst==NULL の場合は、書き込まれたであろうバイト数 (終端のヌル文字 '\0' を含まない) を返します。
変換エラーが発生した場合 (無効なワイド文字に遭遇した場合) は、 static_cast<std::size_t>(-1) を返し、 EILSEQ を errno に格納し、 *ps を未規定の状態にします。
例
Run this code
#include <iostream>
#include <vector>
#include <clocale>
#include <string>
#include <cwchar>
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,State>の仮想プロテクテッドメンバ関数)
|
wcsrtombs の C言語リファレンス
| |