char buf[256]={"あいうえおかきくけこ…"};
のような文字列を200バイトで改行しようとしています。
現在buf[199]の前後で_ismbblead()と_ismbbtrail()を使って半角か全角かを調べ、199目か198目で2つの文字列に分けています。
これでほぼ上手くいくのですが、ごく一部の全角文字列で文字化けします。調べてみると、その文字列の文字コードは第2バイトが第1バイトにも含まれ、第1バイトが第2バイトにも含まれています。
そこで疑問なのですが、buf[199]の前後だけを見て直接判断するのは不可能で、先頭のbuf[0]から1つずつ判断していかないと駄目なのでしょうか?
またその場合、そういう処理を自動で行ってくれるAPI等はあるのでしょうか?
> そこで疑問なのですが、buf[199]の前後だけを見て直接判断するのは
> 不可能で、先頭のbuf[0]から1つずつ判断していかないと
> 駄目なのでしょうか?
基本的には Yes.
行頭でなくても、「区切れ」とわかっている場所から始めればいいので、
条件を満たせばそこから始めることは可能ですが。
> またその場合、そういう処理を自動で行ってくれるAPI等はあるのでしょうか?
環境依存ですが、
_ismbslead、_ismbstrail
これらなら「文字列の先頭または既にわかっている先行バイトへのポインタ」
から判断してくれます。
やはりそうなのですか!
>第2バイトが第1バイトにも含まれ、
辺りから、薄々諦めていたのですが、これで完全に諦めがつきました^^;
今回はおとなしく先頭から判断していくことにします(その方が私の処理的には都合が良いようですので)。
返答有難うございましたm(__)m
ツイート | ![]() |