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

先頭へ戻る

mblen関数

概要 マルチバイト文字のバイト数を調べる。
ヘッダ stdlib.h
形式 int mblen(const char* s, size_t n);
引数 s 対象のマルチバイト文字を指すポインタ。
n 調べる最大バイト数。
戻り値 引数s がヌルポインタでない場合は、引数s が指すバイトから、引数n で指定したバイト数だけを調べ、それがマルチバイト文字として有効なバイト列であれば、マルチバイト文字を構成するバイト数を返す。有効なバイト列でなければ -1 を返す。なお、引数s がヌル文字('\0') を指している場合は 0 を返す。
引数s がヌルポインタであれば、現在のロケールのマルチバイト文字の表現形式がシフト状態に依存する場合は 0以外の値を返し、依存しない場合は 0 を返す。
詳細 バイト列がマルチバイト文字を構成しているものと考え、そのマルチバイト文字が必要としているバイト数を割り出す。調べる範囲は、引数 n で指定したバイト数分だけである。マルチバイト文字が必要とする可能性がある最大バイト数は、ロケールによって異なるので、引数n には MB_CUR_MAX を指定することが多い。
この関数は、ロケールの LC_CTYPE カテゴリの影響を受ける。
注意
使用例
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>

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

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

    i = 0;
    char_count = 0;
    while( str[i] != '\0' ){
        int res = mblen( &str[i], MB_CUR_MAX );
        if( res < 0 ){
            fputs( "不正な文字を含んでいます。\n", stderr );
            return EXIT_FAILURE;
        }

        i += res;
        char_count++;
    }

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

    return 0;
}

実行結果:

length: 9
関連 再開可能な形でマルチバイト文字列の長さを調べる mbrlen関数がある。
解説章 第46章


参考リンク

更新履歴

'2018/4/22 解説中で C95 を(C89 に対して)特別扱いしないように修正。そもそもC言語編は C95ベースなので、余計な説明は省く。

'2018/4/20 「NULL」という表記を「ヌルポインタ」に修正。

'2018/4/11 全体的に文章を見直し修正。

'2018/1/22 新規作成。





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

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

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

Programming Place Plus のトップページへ


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