C ライブラリ関数 -mbtowc()

C 标准库 - <stdlib.h>C 標準ライブラリ - <stdlib.h>

mbtowc()は C 標準ライブラリ内の関数で、マルチバイト文字をワイド文字に変換するために使用されます。

mbtowc()の宣言は<wchar.h>ヘッダーファイルにあり、主にマルチバイト文字セット(UTF-8 など)とワイド文字セット(Unicode など)間の変換をサポートするために使用されます。

mbtowc()は、マルチバイト文字(mbstr)をワイド文字(wc)に変換します。この関数は現在のLC_CTYPEロケール(環境設定)に基づいて、マルチバイト文字の解釈方法を決定します。マルチバイト文字が有効な場合、ワイド文字に変換されます。文字が無効な場合は、-1 を返します。-1。

宣言

以下は mbtowc() 関数の宣言です。

#include <wchar.h>

int mbtowc(wchar_t *wc, const char *mbstr, size_t n);

引数:

  • wc:wchar_t型変数を指すポインタです。この変数は変換後のワイド文字を受け取ります。
  • mbstr: マルチバイト文字列へのポインタで、変換対象のマルチバイト文字シーケンスです。
  • n:mbstr文字列の最大バイト数を示します。通常は文字列の長さに設定できます。

戻り値

  • 成功した場合、mbtowc()変換された文字が占有するバイト数(つまりmbstr内のマルチバイト文字のバイト数)を返します。もしwcがNULLでない場合、その値は 0 より大きくなります。
  • エラーが発生した場合(無効なマルチバイト文字など)、関数は -1 を返します。-1。
  • 文字シーケンスの終わりに遭遇した場合(例: 文字列の終端文字\0に遭遇した場合)、0 を返します。0。

例

以下の例は、mbtowc() 関数の使用方法を示しています。

例

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <wchar.h>
#include <locale.h>

int main()
{
    // プログラムのロケール情報を設定
    setlocale(LC_CTYPE, "");

    // マルチバイト文字列
    const char *str = "ここは example.com";

    // ワイド文字配列。変換後の結果を格納
    wchar_t mb[100];
   
    // 現在の文字インデックスと変換後のワイド文字長
    int i = 0;
    int len;
   
    // 文字を1つずつワイド文字に変換
    while (*str) {
        len = mbtowc(&mb[i], str, MB_CUR_MAX);  // 現在のマルチバイト文字を変換
        if (len > 0) {
            str += len;  // 次の文字の開始位置へ移動
            i++;  // ワイド文字配列に格納
        } else if (len == 0) {
            break;  // 文字列の終端文字に遭遇
        } else {
            // 無効な文字の場合のエラー処理
            printf("无效字符\n");
            break;
        }
    }

    // 変換後のワイド文字列を出力
    wprintf(L"%ls \n", mb);
   
    return 0;
}

上記のプログラムをコンパイルして実行してみましょう。次のような結果が生成されます。これは、結果をマルチバイト形式で出力するためであり、バイナリ出力になります。

这里是 example.com 

例

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

int main() {
    // プログラムのロケール情報を設定
    setlocale(LC_CTYPE, "");

    const char *mbstr = "你好";
    wchar_t wc;

    // 文字を1つずつ変換
    for (size_t i = 0; mbstr[i] != '\0'; i++) {
        int len = mbtowc(&wc, &mbstr[i], 1);
        if (len > 0) {
            wprintf(L"変換後のワイド文字: %lc\n", wc);
            i += len - 1;  // 現在のマルチバイト文字のバイト数をスキップ
        } else if (len == 0) {
            break;
        } else {
            printf("无效字符\n");
        }
    }

    return 0;
}

説明:

  1. マルチバイト文字セット:マルチバイト文字セット(UTF-8 など)では、1文字が複数のバイトで構成される場合があります。一方、ワイド文字セット(Unicode など)の1文字は通常、1つのwchar_t型の値で表されます(一部のプラットフォームでは2または4バイト)。

  2. ロケール設定:mbtowc()の動作は、現在のプログラムのロケール設定に依存します。特にLC_CTYPE設定によって、マルチバイト文字セットの解釈方法が決まります。したがって、この関数を使用する際は通常、setlocale()を使用して適切なロケールを設定する必要があります。

  3. エラー処理:入力されたマルチバイト文字列の形式が無効であるか、ワイド文字に変換できない場合、mbtowc()は -1 を返します-1。変換が成功したことを確認するために、戻り値をチェックする必要があります。

C 标准库 - <stdlib.h>C 標準ライブラリ - <stdlib.h>

その他の拡張