名前空間
変種
操作

std::wcsrtombs

提供: cppreference.com
< cpp‎ | string‎ | multibyte
ヘッダ <cwchar> で定義
std::size_t wcsrtombs( char* dst,

                       const wchar_t** src,
                       std::size_t len,

                       std::mbstate_t* ps );

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

各文字は std::wcrtomb を呼んだかのように変換されます。 変換は以下の場合に停止します。

  • ヌル文字が変換され格納された。 srcNULL に設定され、 *ps は初期シフト状態を表すように設定されます。
  • 現在の C のロケールにおいて有効な文字に対応しない wchar_t が見つかった。 src は変換されなかった最初のワイド文字を指すように設定されます。
  • 格納される次のマルチバイト文字が len を超える。 src は変換されなかった最初のワイド文字を指すように設定されます。 この条件は dst==NULL の場合はチェックされません。

目次

[編集] 引数

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

[編集] 戻り値

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

変換エラーが発生した場合 (無効なワイド文字に遭遇した場合) は、 static_cast<std::size_t>(-1) を返し、 EILSEQerrno に格納し、 *ps を未規定の状態にします。

[編集]

#include <iostream>
#include <vector>
#include <clocale>
#include <string>
#include <cwchar>
 
void print_wide(const wchar_t* wstr)
{
    std::mbstate_t state = std::mbstate_t();
    std::size_t len = 1 + std::wcsrtombs(nullptr, &wstr, 0, &state);
    std::vector<char> mbstr(len);
    std::wcsrtombs(&mbstr[0], &wstr, mbstr.size(), &state);
    std::cout << "multibyte string: " << &mbstr[0] << '\n'
              << "Length, including '\\0': " << mbstr.size() << '\n';
}
 
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ß水𝄋"
    print_wide(wstr);
}

出力:

multibyte string: zß水𝄋
Length, including '\0': 11

[編集] 関連項目

指定された状態を使用してワイド文字をマルチバイト表現に変換します
(関数) [edit]
指定された状態を使用してマルチバイト文字列をワイド文字列に変換します
(関数) [edit]
[仮想]
そのようなファイルに書き込むときのように、internTからexternTに文字列を変換します
Original:
converts a string from internT to externT, such as when writing to file
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

(std::codecvtの仮想プロテクテッドメンバ関数) [edit]