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.