std:: wcsrtombs
|
ヘッダーで定義
<cwchar>
|
||
|
std::
size_t
wcsrtombs
(
char
*
dst,
const
wchar_t
**
src,
|
||
* src が指す先頭要素の配列からのワイド文字シーケンスを、 * ps で記述される変換状態で開始するナローマルチバイト表現に変換する。 dst がnullでない場合、変換された文字は dst が指すchar配列の連続する要素に格納される。宛先配列には最大 len バイトまで書き込まれる。
各文字は、あたかも std::wcrtomb の呼び出しによって変換されます。変換は以下の場合に停止します:
- ナル文字が変換され格納されました。 src はヌルポインタに設定され、 * ps は初期シフト状態を表します。
- 現在のCロケールで有効な文字に対応しない wchar_t が見つかりました。 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
関連項目
|
ワイド文字をマルチバイト表現に変換する(状態を指定)
(関数) |
|
|
ナローマルチバイト文字列をワイド文字列に変換する(状態を指定)
(関数) |
|
|
[virtual]
|
InternT
から
ExternT
への文字列変換(ファイル書き込み時など)
(
std::codecvt<InternT,ExternT,StateT>
の仮想保護メンバ関数)
|
|
C documentation
for
wcsrtombs
|
|