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 バイトが検査されます。
戻り値
string が NULLの場合、
mbtowc() 関数は以下を戻します。- アクティブなロケールが混合バイトの場合は、ゼロ以外。 関数は、状態変数を初期化します。
- それ以外の場合は 0 。
string が NULLでない場合、
mbtowc() 関数は以下を戻します。- 0 ( string がヌル文字を指している場合)
- 変換されたマルチバイト文字を構成するバイト数。
- string が有効なマルチバイト文字を指さない場合は、-1。
変換エラーが発生した場合、errno は ECONVERT に設定される可能性があります。
例
この例では、
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);
}