名前空間
変種
操作

std::wcstombs

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

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

各文字は wctomb の変換状態が影響を受けないことを除いて std::wctomb を呼んだかのように変換されます。 変換は以下の場合に停止します。

  • ヌル文字が変換され格納された。
  • 現在の C のロケールにおいて有効な文字に対応しない wchar_t が見つかった。
  • 格納される次のマルチバイト文字が len を超える。

目次

[編集] ノート

ほとんどの処理系では、この関数は文字列を処理するにあたって std::mbstate_t 型のグローバルな静的オブジェクトを更新し、複数のスレッドから同時に呼ぶことができません。 そのような場合は std::wcsrtombs を使用するべきです。

POSIX は次のようなよくある拡張を規定しています。 dst がヌルポインタの場合、この関数は、もし変換が行われたならば dst に書き込まれたであろうバイト数を返します。 同様の動作は std::wcsrtombs の場合は標準です。

[編集] 引数

dst - マルチバイト文字が格納されるナロー文字配列を指すポインタ
src - 変換するヌル終端ワイド文字列の最初の要素を指すポインタ
len - dst の指す配列の利用可能なバイト数

[編集] 戻り値

成功した場合は、 dst によって最初の要素が指されている文字配列に書き込まれた (シフトシーケンスを含み、終端の '\0' を含まない) バイト数を返します。

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

[編集]

#include <iostream>
#include <clocale>
#include <cstdlib>
 
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ß水𝄋

[編集] 関連項目

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