mbtowc() — マルチバイト文字をワイド文字に変換する

形式

#include <stdlib.h>
int mbtowc(wchar_t *pwc, const char *string, size_t n);

言語レベル

ANSI

スレッド・セーフ

いいえ

代わりに mbrtowc() を使用してください。

ロケール依存

この関数の振る舞いは、現行ロケールの LC_CTYPE カテゴリーの影響を受ける可能性があります。 この関数は、LOCALETYPE(*LOCALEUCS2) または LOCALETYPE(*LOCALEUTF) をコンパイル・コマンドで指定した場合も、現行ロケールの LC_UNI_CTYPE カテゴリーによって影響を受ける可能性があります。 詳しくは、 CCSID とロケールについてを参照してください。

ワイド文字関数

詳しくは、 ワイド文字 を参照してください。

説明

mbtowc() 関数はまず、 stringが指すマルチバイト文字の長さを判別します。 次に、そのマルチバイト文字を mbstowcs で記述されたワイド文字に変換します。 最大で n バイトが検査されます。

戻り値

stringNULLの場合、 mbtowc() 関数は以下を戻します。
  • アクティブなロケールが混合バイトの場合は、ゼロ以外。 関数は、状態変数を初期化します。
  • それ以外の場合は 0
stringNULLでない場合、 mbtowc() 関数は以下を戻します。
  • 0 ( string がヌル文字を指している場合)
  • 変換されたマルチバイト文字を構成するバイト数。
  • string が有効なマルチバイト文字を指さない場合は、-1。

変換エラーが発生した場合、errnoECONVERT に設定される可能性があります。

この例では、 mblen() 関数と mbtowc() 関数を使用して、マルチバイト文字を単一のワイド文字に変換します。
#include <stdio.h>
#include <stdlib.h>
 
#define LOCNAME "/qsys.lib/mylib.lib/ja_jp959.locale"
/*Locale created from source JA_JP and CCSID 939 */
 
int length, temp;
char string [] = "\x0e\x41\x71\x0f";
wchar_t arr[6];
 
int main(void)
{
   /* initialize internal state variable */
   temp = mbtowc(arr, NULL, 0);            
 
   setlocale (LC_ALL, LOCNAME);
   /* Set string to point to a multibyte character. */
   length = mblen(string, MB_CUR_MAX);
   temp = mbtowc(arr,string,length);
   arr[1] = L'\0';
   printf("wide character string: %ls",arr);
}

関連情報