バグ:Removeでも誤って処理されるならUnicodeで開発すべき?

Posted: 2013年02月04日

文字列操作(文字の削除)で気が付かずに書いてしまうバグを紹介します。

プログラムプログラム:

 #include <stdio.h>

 int main(int argc, char *argv[])
 {
    CString strSrc = _T(""ABC"DEFG""); // 全角空白

    strSrc.Remove(_T("""));

    // 処理

    return 0;
 }

このプログラムにどのように文字列操作(文字の削除)にバグが存在すると思いますか?

  • UNICODE,MBCSではない場合は、2byte文字の文字が誤って削除される場合がある

改善版プログラム改善版プログラム:

 #include <stdio.h>

 int main(int argc, char *argv[])
 {
    CString strSrc = _T(""ABC"DEFG""); // 全角空白

    strSrc.Remove(_T("""));

    // 処理

    return 0;
 }

解説解説:

プログラムとしては、変化はありません
対応策としては、UNICODEかMBCSでコンパイルするしかないと思います。
今回の問題は、2byte文字を1byteとして認識して文字を削除してしまうことにより発生しています。

2byte文字として処理を行うためには、上記の設定を行いコンパイルすることです。

カテゴリー: バグ, プログラム | タグ: , , | コメント無し »

コメント