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

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;
 }

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



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

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

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月25日

文字列のコピーでよく指摘されているバグを紹介します。
よく指摘されているため、C言語または、C++等を使用している場合は、問題無いですが
久々に使用した時に書いてしまうこともあります。

プログラムプログラム:

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

 int main(int argc, char *argv[])
 {
    TCHAR szSrc = _T("12345");
    TCHAR szDest[5];

    // 文字列のコピー
    _tcscpy(szDest, szSrc);

    // 処理

    return 0;
 }

このプログラムにどのような文字列のコピーのバグがあると思いますか?



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

バグ:COM用文字列型(BSTR)の扱い

Posted: 2012年11月18日

COM用文字列型(BSTR)の扱いでよく書いてしまうバグを紹介します。
ちなみに、COMとは、Component Object Modelの略であり、再利用可能なソフトウェア コンポーネントを作成するための仕様です。
よく関わるものは、msxmlでxmlを操作する際に使用します。(msxmlがcomでできているため)

プログラムプログラム:

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

 int main(int argc, char *argv[])
 {
    BSTR strSrc = ::SysAllocString(L"12345");
    CString strDest = (LPCTSTR)(_bstr_t)strSrc ;

    // 処理

    return 0;
 }

このプログラムにどのような文字列変換関連のバグがあると思いますか?



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

ユニットテストでは何をテストするか

Posted: 2012年11月11日

テストをしたい項目は山のように存在する
ユニットテストではどのようなテストが可能であり
また、どのように構築していくべきか



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

テストの自動化は、無敵の用心棒のように思える

Posted: 2012年11月03日

テストの自動化は、様々な方法が存在します。

  • ユニットテストの導入
  • マウスとキーボード入力の自動化



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