名前空間
変種
操作

std::mbstowcs

From cppreference.com
< cpp‎ | string‎ | multibyte
 
 
 
 
ヘッダ <cstdlib> で定義
std::size_t mbstowcs( wchar_t* dst, const char* src, std::size_t len );

srcが指す配列のマルチバイト文字文字列を、ワイド文字列表現に変換します。変換された文字は、dstが指す配列の連続する要素に格納されます。dst配列には、len文字を超えるワイド文字は書き込まれません。

std::mbtowcによる変換と同様に、各文字は変換されますが、mbtowcの変換状態は影響を受けません。変換は、以下のいずれかの条件で停止します。

  • マルチバイトヌル文字が変換され、格納された。
  • 無効な(現在のCロケールにおいて)マルチバイト文字に遭遇した。
  • 格納される次のワイド文字がlenを超える場合。

目次

[編集] 注釈

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

POSIXは一般的な拡張を規定しています。もしdstがヌルポインタである場合、この関数は、変換された場合に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> の virtual protected メンバ関数) [編集]
English 日本語 中文(简体) 中文(繁體)