- 2012-2-15
- Visual C++
古い記事
CStringクラスのLeftメソッド等を使う場合に気をつけたい。
Leftは文字数ではなくバイト数で取得するから。
if(iStringLen > iLen)
{
for(int i = iLen – 1; i > -1; i–)
{
//文字列先頭アドレス取得
unsigned char * lpData = (unsigned char *)((LPCSTR)csStoreNameTemp);
// 終了位置の文字がマルチバイト文字の先行バイトか?
if( _ismbslead(lpData,lpData+i) == -1 )
{
//終了位置がマルチバイト文字の先行バイトだった。
csResult = csStoreNameTemp.Left(i);//文字列iバイト目迄取得
}
else
{
//終了位置がマルチバイト文字の先行文字でなくなったので文字列を取得する
csResult = csStoreNameTemp.Left( i + 1 );//文字列iバイト目迄取得
break;
}
}
}
else
{
//指定バイト未満だったので処理せず終了
csResult = csStoreNameTemp;//正しい値をセット
}