バグ:文字列の反転をした場合問題ありますか

Posted: 2013年07月02日

文字列操作(文字列の反転)で書いてしまうバグを紹介します。

プログラムプログラム:

 #include <stdio.h>
 #include <string.h>

 int main(int argc, char *argv[])
 {
    const TCHAR *pszSrc = _T("ABCDEF");
    TCHAR *pszRev = _strrev(pszSrc);

    // 処理

    return 0;
 }

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

  • 文字列定数に対しては使用できないので領域を事前に確保する必要がある

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

 #include <stdio.h>

 int main(int argc, char *argv[])
 {
    const TCHAR *pszSrc = _T("ABCDEF");
    TCHAR *pszRev = _strrev(strdup(pszSrc));

    // 処理

    return 0;
 }

解説解説:

環境によって違うかもしれませんが

pszSrcは定数のためstrrevを実行しても
値が変化しないか例外が発生します。

そのためstrdupにて領域を確保し
その領域に反転した値を設定するようにする必要があります。

引数にconst charを受け取るのに
その領域に書き込むのはどうかと思う設計です。

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

コメント