mbstate_t | Programming Place Plus C言語編 標準ライブラリのリファレンス

トップページC言語編標準ライブラリのリファレンス(名前順)

トップページC言語編標準ライブラリのリファレンス(ヘッダ別)


mbstate_t

概要

マルチバイト文字とワイド文字間での変換状態を表す型。

ヘッダ

wchar.h

形式

typedef int mbstate_t;

詳細

形式は環境によって異なるが、配列ではない何らかの型である。

マルチバイト文字列からワイド文字列、またはその反対の変換を行う際に変換状態を記憶するために用いる。たとえば、mbrtowc関数wcrtomb関数で使用されている。格納される情報の形は、ロケールの LC_CTYPEカテゴリの影響を受ける。

適切な初期状態として、値 0 が使える。つまり、0 で初期化されている mbstate_t型のオブジェクトを、任意の文字列の変換作業を開始するときに使用できる。

注意

使用例

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

int main(void)
{
    const char str[] = "日本語を使うテスト";

    // LC_CTYPE をネイティブロケールに変更
    if (setlocale(LC_CTYPE, "") == NULL) {
        fputs("ロケールの設定に失敗しました。\n", stderr);
        return EXIT_FAILURE;
    }

    mbstate_t mbstate = {0};

    int char_count = 0;
    for (int i = 0; str[i] != '\0'; ++i) {
        size_t len = mbrlen(&str[i], 1, &mbstate);

        if (len == (size_t)-1) {
            // 有効な文字列ではない
            perror("");
            exit(EXIT_FAILURE);
        }
        if (len != (size_t)-2) {
            // マルチバイト文字を構成するバイト列の途中でないなら、
            // 1文字としてカウント
            char_count++;
        }
    }

    printf("length: %d\n", char_count);
}

実行結果:

length: 9

関連

解説章


参考リンク


更新履歴

’2018/4/27 「詳細」に追記。ロケールと初期状態について。

’2018/4/11 「詳細」の内容を見直して修正。

’2018/1/22 新規作成。



標準ライブラリのリファレンス(名前順)のトップページへ

標準ライブラリのリファレンス(ヘッダ別)のトップページへ

C言語編のトップページへ

Programming Place Plus のトップページへ



はてなブックマーク に保存 Pocket に保存 Facebook でシェア
X で ポストフォロー LINE で送る noteで書く
rss1.0 取得ボタン RSS 管理者情報 プライバシーポリシー
先頭へ戻る