名前空間
変種
操作

std::wcstombs

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

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

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

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

目次

[編集] 注記

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

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

[編集] パラメータ

dst - マルチバイト文字が格納される狭い文字配列へのポインタ
src - 変換するヌル終端ワイド文字列の最初の要素へのポインタ
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> の virtual protected メンバ関数) [編集]
C のドキュメントwcstombs について)
English 日本語 中文(简体) 中文(繁體)