C言語入門講座。関数、サンプル集を参考にして、 C言語をマスターしよう。初心者から上級者まで。

マルチバイト文字のバイト数を取得する

2012.08.10

mblen関数は、マルチバイト文字のバイト数を取得します。

#include <stdlib.h>
int mblen(const char *s, size_t n);

sは、バイト数を取得する対象となるマルチバイト文字を指定します。
マルチバイト文字とは、半角の「abc」「123」などの1バイト文字と、全角の「あいうえお」という2バイト文字が混在した文字セットの文字です。

Shift_JISやEUC-JPなどの文字セットがこれにあたります。

nは、マルチバイト文字1文字に必要な、最大バイト数を指定します。

この値は文字セットに依存し、以下が定義されています。












MB_CUR_MAX 現在のロケールのLC_CTYPE設定で、
マルチバイト文字1文字に必要な最大バイト数
MB_LEN_MAX 全てのロケールで、
マルチバイト文字1文字に必要な最大バイト数

※LC_CTYPE設定というのは、ロケール(地域情報)設定のことで、設定と参照はsetlocale関数で行うことができます。

戻り値として、

成功時は、sで指定したマルチバイト文字のバイト数を返し、

失敗時は、-1を返します。

プログラム 例

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

int main(void)
{
    const char multi[] = 'あ123いう';
    int i, len;
    int bytelen, charlen;

    /* ロケールをjpn(日本)にする */
    setlocale( LC_CTYPE, 'jpn' );

    bytelen = (int)strlen(multi);

    charlen = 0;
    i = 0;
    while (multi[i] != '�') {
        /* 各文字ごとのバイト数を取得する */
        len = mblen(&multi[i], MB_CUR_MAX);
        if (len != -1) {
            i += len;
            charlen++;
        }
        else {
            break;
        }
    }

    printf('%sn', multi);
    printf('バイト数:%dn', bytelen);
    printf('文字数:%dn', charlen);

    return 0;
}

例の実行結果

> mblen.exe
あ123いう
バイト数:9
文字数:6

※Windows環境でのみ動作確認しております。LINUX環境などでは動作が異なる場合がありますので、その場合は環境に合わせてカスタマイズしてください。

Copyright © 2011 katsumi Handa All Rights Reserved.

関連記事