このページでは char 型の文字が1文字なのかマルチバイトなのかチェックする方法を紹介します。
スポンサード リンク
例えばマルチバイト文字が含まれる文字列に対して、
*p == '}' |
のような判定を行うと、意図しない文字がヒットする場合があります。
これは2バイトで構成される漢字などのマルチバイトの1バイト目あるいは2バイト目が意図せずヒットした場合などで発生します。
このような場合は、文字がマルチバイトの長さをチェックする関数である _mbclen を使用します。引数として渡した文字の長さを返しますので、2バイト文字の1バイト目の場合は戻り値として2を返します。それ以外は1を返します。
以下は文字列 AあBいC に対して0番目~7番目がマルチバイト文字の1文字目かどうかをチェックします。
この場合は「あ」「い」の1バイト目で_mbclen が2を返し、それ以外では1を返します。
#include "stdafx.h" #include <windows.h> #include <mbstring.h> int main() { char Str[] = "AあBいC"; char *p = Str; int num = 0; while (*p != 0) { if (_mbclen((BYTE*)p) == 1) { printf("%d文字目は1バイト文字\n", num++); } else { printf("%d文字目は2バイト文字\n", num++); } p++; } return 0; } |
結果は以下の通りです。
0文字目は1バイト文字 1文字目は2バイト文字 2文字目は1バイト文字 3文字目は1バイト文字 4文字目は2バイト文字 5文字目は1バイト文字 6文字目は1バイト文字 |
スポンサード リンク
[VC++ サンプルに戻る]