Namespaces
Variants

std:: wcstombs

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

src が指す最初の要素から始まるワイド文字のシーケンスを、初期シフト状態で始まるナローマルチバイト表現に変換します。変換された文字は、 dst が指すchar配列の連続する要素に格納されます。宛先配列には最大で len バイトまで書き込まれます。

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

  • ナル文字が変換され格納されました。
  • 現在のCロケールで有効な文字に対応しない wchar_t が見つかりました。
  • 次に格納されるマルチバイト文字が len を超えることになります。

目次

注記

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

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

パラメータ

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

戻り値

成功時は、 dst が指す先頭要素の文字配列に書き込まれたバイト数(シフトシーケンスを含むが、終端の ' \0 ' を除く)を返します。

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

#include <clocale>
#include <cstdlib>
#include <iostream>
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ß水𝄋"
    char mbstr[11];
    std::wcstombs(mbstr, wstr, 11);
    std::cout << "multibyte string: " << mbstr << '\n';
}

出力:

multibyte string: zß水𝄋

関連項目

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