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

先頭へ戻る

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[] = "日本語を使うテスト";
    mbstate_t mbstate = {0};
    int char_count;
    int i;
    size_t len;

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

    char_count = 0;
    for( i = 0; str[i] != '\0'; ++i ){
        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 );

    return 0;
}

実行結果:

length: 9
関連
解説章


参考リンク

更新履歴

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

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

'2018/1/22 新規作成。





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

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

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

Programming Place Plus のトップページへ


このエントリーをはてなブックマークに追加
rss1.0 取得ボタン RSS