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

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

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


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[] = "日本語を使うテスト";

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

    int i = 0;
    int 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);
}

実行結果:

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 のトップページへ



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