最終更新日時:
が更新

履歴 編集

function
<cwchar>

std::wcsrtombs

namespace std {
  size_t wcsrtombs(char* dst, const wchar_t** src, size_t len, mbstate_t* ps);
}

概要

ワイド文字列を、マルチバイト文字列へ変換する。

効果

*srcが指す文字列を変換し、dstが指す配列へ最大lenバイトを書き込む。変換が途中で止まった場合、*srcは次に変換すべき位置を指すように更新される。すべて変換できた場合、*srcにはヌルポインタが設定される。

戻り値

書き込んだバイト数(終端のヌル文字を含まない)を返す。変換できないワイド文字があった場合は(size_t)-1を返し、errnoEILSEQを設定する。

備考

  • dstがヌルポインタの場合、書き込みは行われず、変換に必要なバイト数だけが返る

#include <cwchar>
#include <clocale>
#include <iostream>

int main()
{
  std::setlocale(LC_ALL, "C.UTF-8");

  std::mbstate_t state{};
  const wchar_t* src = L"abc";
  char buffer[8] = {};

  std::size_t n = std::wcsrtombs(buffer, &src, 8, &state);
  std::wcout << n << std::endl;
}

出力例

3

バージョン

言語

  • C++98

関連項目

  • mbsrtowcs: 逆方向の変換
  • wcrtomb: 1文字ずつ変換する
  • std::wcstombs(): 変換状態を引数で受け取らない、内部状態に依存するバージョン