バグ:Trimで指定文字が削除されないなんて詐欺に近い

Posted: 2013年01月28日

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

プログラムプログラム:

 #include <stdio.h>

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

    strSrc.Trim();

    // 処理

    return 0;
 }

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



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

バグ:CSVなどの文字を解析

Posted: 2013年01月21日

文字列解析中(CSV等)に間違えてよく書いてしまうバグを紹介します。

プログラムプログラム:

 #include <stdio.h>

 int main(int argc, char *argv[])
 {
    const TCHAR *pszSrc = _T("AAA,BBB,CCC");
    CStringArray aryResult;

    char *pPosition = _tcstok(pszSrc, _T(",");
    while (pPosition != NULL) {
        pPosition = _tcstok(pszSrc, _T(",");
        aryResult.Add(pPosition);
    }

    return 0;
 }

このプログラムにどのように文字列解析処理を間違えていると思いますか?



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

バグ:文字化け文字列の対応

Posted: 2013年01月14日

文字化け文字列の対応を紹介します。
以前も多少記載したけれどおさらいという事で
今回はどのようなことを気をつけるべきかを記載していきたいと思っています。



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

バグ:文字列中にnullが存在する文字列の扱い方

Posted: 2013年01月07日

文字列中にnullが存在する文字列の扱い方を間違えてよく書いてしまうバグを紹介します。
文字列中にnullが入っている文字列とは例えばmainの引数などです。

「cmd.exe time /T」を実行した場合

cmd.exeの引数には「cmd.exetime/T」が設定される。
通常は、この文字列を解釈する必要がないためこの処理で苦労することはありません

プログラムプログラム:

 #include <stdio.h>

 int CountWord (const TCHAR *pData)
 {
    int nLength = _tcslen(pData);
    int nWordCount = 0;

    for (int nIndex = 0; nIndex < nLength; nIndex++) {
        if (*(pData + nIndex) == _T('\0')) {
            // 単語の最後が見つかった(\0)
            nWordCount++;
        }
    }
 }

 int main(int argc, char *argv[])
 {
    const TCHAR *pszSrc = _T("Green\0Red\0Blue");

    int nWordCount = CountWord(pszSrc);

    return 0;
 }

このプログラムにどのように文字列中にnullが存在する文字列の扱い方を間違えていると思いますか?



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

バグ:文字列のイテレータで指定文字を検索

Posted: 2012年12月31日

文字列のイテレータで指定文字を検索する処理でよく書いてしまうバグを紹介します。
イテレータとは、ポインターのようなものであるがポインターではないため
ポインターのように扱うと問題になります。

プログラムプログラム:

 #include <stdio.h>

 int main(int argc, char *argv[])
 {
    std::string strSrc = _T("1234567890");
    TCHAR cSearchWord = _T('5')

    int nFindIndex = 0;
    string::iterator inIte = strSrc.begin();
    while (inIte != strSrc.end()) {
        if (*inIte == cSearchWord) {
            break;
        }
        nFindIndex++;
    }

    return 0;
 }

このプログラムにどのような文字列のイテレータで指定文字を検索する処理処理のバグがあると思いますか?



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

バグ:CStringのGetBufferを用いて既存の処理と連携する

Posted: 2012年12月24日

CStringのGetBufferでよく書いてしまうバグを紹介します。
Javaなどの言語からC++を使用するようになった時にやりそうなことです。

プログラムプログラム:

 #include <stdio.h>
 #include <Windows.h>

 int main(int argc, char *argv[])
 {
    DWORD dwNameLength;
    CString strName;


    // ユーザ名の取得
    if (GetUserName(strName.GetBuffer(), &amp;dwNameLength) == FALSE) {
        return -1;
    }

    // 処理

    return 0;
 }

このプログラムにどのような指定文字列を抜き出し処理のバグがあると思いますか?



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

バグ:文字列の長さを取得

Posted: 2012年12月17日

文字列から長さを取得する処理でよく書いてしまうバグを紹介します。
実際に最近私がやってしまったバグでも有ります。
わかっていても〜やってしまう・・・
前も同様の内容を記述して記憶はありますが
重要なのでもう一度

プログラムプログラム:

 #include <stdio.h>
 #include <stdlib.h>

 int main(int argc, char *argv[])
 {
    CString strSrc = _T("1234567890");
    const int nLength = strSrc.GetLength();

    // 処理
    printf(_T("%d文字"), nLength);

    return 0;
 }

このプログラムにどのような文字列の長さ取得処理のバグがあると思いますか?



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

ユニットテスト環境はどのようなものが存在するか(C++編)

Posted: 2012年12月10日

前回は、C言語のユニットテストフレームワークを紹介しましたが
今回は、C++のユニットテストフレームワークについて
書いていきます。
C言語よりも発達しているせいか代表的なものしかなかなか見つからない・・・
ユニットテスト C++ Wikipedia



カテゴリー: バグ, ユニットテスト | タグ: , , | コメント無し »

バグ:文字列から指定文字列を抜き出し

Posted: 2012年12月06日

文字列から指定文字列を抜き出し処理でよく書いてしまうバグを紹介します。
文字列中から特定の文字列を探し、それ以降の文字列を取得するたぐいの処理です。

プログラムプログラム:

 #include  <stdio.h>
 #include <stdlib.h>

 int main(int argc, char *argv[])
 {
    CString strSrc = _T("1234567890");
    CString strDest;

    // 文字列の抜き出し
    int nIndex = szSrc.Find(_T("56"));
    strDest = szSrc.Mid(nIndex); // strDest=567890

    // 処理

    return 0;
 }

このプログラムにどのような指定文字列を抜き出し処理のバグがあると思いますか?



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

ユニットテスト環境はどのようなものが存在するか

Posted: 2012年11月28日

いままでユニットテストの話題を話してきましたが
ユニットテストは、どのようなものがあるかは触れていなかったため
今回はそこについて書いていきます。
開発言語によって、使用するものが異なるため
もちろん言語ごとに記載していきますが
今回は、C言語編(需要はなさそう)
ユニットテスト C言語 Wikipedia



カテゴリー: バグ, ユニットテスト | タグ: , , | コメント無し »
Page 4 of 6123456