名前空間
変種
操作

std::mbsrtowcs

提供: cppreference.com
< cpp‎ | string‎ | multibyte
ヘッダ <cwchar> で定義
std::size_t mbsrtowcs( wchar_t* dst,

                       const char** src,
                       std::size_t len,

                       std::mbstate_t* ps );

*src によって最初の要素が指されている配列内の *ps の表す変換状態で始まるヌル終端マルチバイト文字シーケンスをワイド文字表現に変換します。 dst がヌルでなければ、変換された文字が dst の指す wchar_t 配列の連続する要素に格納されます。 最大 len 個のワイド文字が dst 配列に書き込まれます。

各マルチバイト文字は std::mbrtowc を呼び出したかのように変換されます。 変換は以下の場合に停止します。

  • マルチバイトヌル文字が変換され格納された。 srcNULL に設定され、 *ps は初期変換状態を表すように設定されます。
  • 無効なマルチバイトシーケンス (現在の C のロケールに従った) に遭遇した。 src は変換されなかった最初のマルチバイト文字の先頭を指すように設定されます。
  • 格納される次のワイド文字が len を超える。 src は変換されなかった最初のマルチバイト文字の先頭を指すように設定されます。 この条件は dst==NULL の場合はチェックされません。

目次

[編集] 引数

dst - 結果が格納されるワイド文字配列を指すポインタ
src - ヌル終端マルチバイト文字列の最初の要素を指すポインタへのポインタ
len - dst の指す配列内の利用可能なワイド文字数
ps - 変換状態オブジェクトを指すポインタ

[編集] 戻り値

成功した場合は、文字配列に書き込まれた終端の L'\0' を除くワイド文字数を返します。 dst==NULL の場合は、長さが無制限であったならば書き込まれたであろうワイド文字数を返します。

変換エラーが発生した場合 (無効なマルチバイト文字に遭遇した場合) は、 static_cast<std::size_t>(-1) を返し、 EILSEQerrno に格納し、 *ps を未規定の状態にします。

[編集] ノート

この関数は変換したマルチバイト文字の終端に src ポインタを移動させます。 これは dst==NULL の場合は発生しません。

[編集]

#include <iostream>
#include <vector>
#include <clocale>
#include <cwchar>
 
void print_as_wide(const char* mbstr)
{
    std::mbstate_t state = std::mbstate_t();
    std::size_t len = 1 + std::mbsrtowcs(NULL, &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 = u8"z\u00df\u6c34\U0001f34c"; // or u8"zß水🍌"
    print_as_wide(mbstr);
}

出力:

Wide string: zß水🍌
The length, including '\0': 5

[編集] 関連項目

指定された状態を使用して次のマルチバイト文字をワイド文字に変換します
(関数) [edit]
指定された状態を使用してワイド文字列をマルチバイト文字列に変換します
(関数) [edit]
[仮想]
ファイルから読み込む時などのために、文字列を externT から internT に変換します
(std::codecvt<InternT,ExternT,State>の仮想プロテクテッドメンバ関数) [edit]