wcrtomb() - ワイド文字のマルチバイト文字への変換

標準

標準/拡張機能 C/C++ 依存項目

ISO C 改訂
C99
Single UNIX Specification、バージョン 3

両方  

形式

XPG4:
#include <wchar.h>

size_t wcrtomb(char * __restrict__s, wchar_t wchar, mbstate_t * __restrict__pss);
XPG4:
#define _XOPEN_SOURCE
#define _MSE_PROTOS
#include <wchar.h>

size_t wcrtomb(char *s, wchar_t wchar, mbstate_t *pss);

機能説明

s が NULL ポインターの場合には、wcrtomb() 関数は 初期シフト状態 (エンコードが状態依存でないか、または 初期変換状態が記述されている場合はゼロ) を入力するのに必要な バイト数を判別します。記述されている結果の状態は初期変換状態です。

s が NULL ポインターでない場合は、wcrtomb() 関数は wchar によって指定されたワイド文字に対応する マルチバイト文字 (シフト・シーケンスを含む) を表示するのに必要な バイト数を判別し、結果のバイトを最初のエレメントが s に よって指定される配列に保管します。最大で、MB_CUR_MAX バイトが保管されます。wchar が NULL ワイド文字の場合には、記述されている 結果の状態は初期変換状態です。

wcrtomb() は、wctomb() の「再始動可能」バージョンです。すなわち、シフト状態情報は引数の 1 つとして渡され、戻り時に更新されます。wcrtomb() を使用すると、各マルチバイト・ストリングごとの シフト状態情報を保持している場合には、あるマルチバイト・ストリングから別のマルチバイト・ストリングへ 切り替えることができます。

このワイド文字関数の動作は、現行ロケールの LC_CTYPE カテゴリーの影響を受けます。 カテゴリーを変更すると、未定義の結果が発生する可能性があります。

XPG4 の特殊な動作: プログラム・ソース・ファイル内の wchar ヘッダーをインクルードするステートメントより前に、XPG4 の動作を指定してフィーチャー・テスト・マクロを定義した場合には、_MSE_PROTOS フィーチャー・テスト・マクロも定義して、プログラムのコンパイル時に使用可能な wchar ヘッダーに wcrtomb() 関数の宣言を行う必要があります。 XPG4 と他のフィーチャー・テスト・マクロのリストについては、表 1 を参照してください。

戻り値

s が NULL ポインターの場合には、wcrtomb() は、初期シフト状態を入力するのに必要なバイト数を戻します。戻された値は、MB_CUR_MAX の値より大きくなりません。

s が NULL ポインターでない場合には、wcrtomb() は、wchar が有効なワイド文字のときに、配列オブジェクトに保管されているバイト数 (シフト・シーケンスを含む) を戻します。そうでない場合には、wchar が有効なワイド文字でないときに、エンコード・エラーが起こり、マクロ EILSEQ の値が errno に保管され、-1 が戻されますが、変換状態は、変更されないまま残ります。

#include <stdio.h>
#include <wchar.h>

int main(void)
{
   char    *string;
   wchar_t wc;
   size_t  length;
   length = wcrtomb(string, wc, NULL);
}

関連情報