Namespaces
Variants

std:: mbstowcs

From cppreference.net
ヘッダーで定義 <cstdlib>
std:: size_t mbstowcs ( wchar_t * dst, const char * src, std:: size_t len ) ;

src が指す最初の要素を持つ配列からマルチバイト文字列をワイド文字表現に変換します。変換された文字は、 dst が指す配列の連続する要素に格納されます。最大で len 個のワイド文字が変換先配列に書き込まれます。

各文字は、 std::mbtowc を呼び出したかのように変換されますが、mbtowcの変換状態は影響を受けません。以下の場合に変換は停止します:

  • マルチバイトのヌル文字が変換され格納されました。
  • 現在のCロケールで無効なマルチバイト文字が検出されました。
  • 次に格納されるワイド文字が len を超える場合があります。

目次

注記

ほとんどの実装では、この関数は文字列を処理する際に std::mbstate_t 型のグローバル静的オブジェクトを更新するため、2つのスレッドで同時に呼び出すことはできません。 そのような場合は std::mbsrtowcs を使用する必要があります。

POSIXは共通の拡張機能を規定しています: dst がnullポインタの場合、この関数は変換された場合に dst に書き込まれるワイド文字数を返します。同様の動作は std::mbsrtowcs でも標準化されています。

パラメータ

dst - ワイド文字列が格納されるワイド文字配列へのポインタ
src - 変換対象のヌル終端マルチバイト文字列の先頭要素へのポインタ
len - dstが指す配列で利用可能なワイド文字の数

戻り値

成功時には、終端の L ' \0 ' を除き、出力先配列に書き込まれたワイド文字の数を返します。

変換エラーが発生した場合(無効なマルチバイト文字が検出された場合)、 static_cast < std:: size_t > ( - 1 ) を返します。

#include <clocale>
#include <cstdlib>
#include <iostream>
int main()
{
    std::setlocale(LC_ALL, "en_US.utf8");
    std::wcout.imbue(std::locale("en_US.utf8"));
    const char* mbstr = "z\u00df\u6c34\U0001f34c"; // or u8"zß水🍌"
                        // or "\x7a\xc3\x9f\xe6\xb0\xb4\xf0\x9f\x8d\x8c";
    wchar_t wstr[5];
    std::mbstowcs(wstr, mbstr, 5);
    std::wcout << "wide string: " << wstr << '\n';
}

出力:

wide string: zß水🍌

関連項目

ナローマルチバイト文字列をワイド文字列に変換する(状態指定)
(関数)
ワイド文字列をナローマルチバイト文字列に変換する
(関数)
[virtual]
ExternT から InternT への文字列変換(ファイル読み込み時など)
( std::codecvt<InternT,ExternT,StateT> の仮想保護メンバ関数)