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

Posted: 2013年01月14日

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



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

C言語入門(22) intとかfloatとか実情のデータ型に合わない!!

Posted: 2013年01月10日

実際にbyteデータを扱いたいのに適切なデータ型が見つからない
前の話題にでも出ましたが構造体や共用帯を手軽に記述したい
などの場合typedefを用いることで実現ができます。
typedefでは名前の通り型を定義することができます。

typedef 意味 名前;

で定義します。



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

バグ:文字列中に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が存在する文字列の扱い方を間違えていると思いますか?



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

C言語入門(21)定数constとdefineの違い

Posted: 2013年01月03日

定数宣言は、constまたはdefineを用いることで
可能です。

 const int cnMax = 50;
 #define CN_MAX (50)

宣言方法が異なりますがどちらも定数を宣言可能です。

では、なにが違うのか!!



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

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

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

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



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

C言語入門(20)存在価値が分かりづらい共用体を活用したい

Posted: 2012年12月27日

前回は、構造体について書きましたが
今回は、共用体(union)について書いていきます。

実際unionっていつ役立つのか、どのように使用すれば良いのか
さっぱりわからない時がありました。
参考書を読んでも使い方だけと・・・

実際にもそこまで使い道はないけれど
痒いところに手が届く手段として理解してもらえればと



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

バグ: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;
 }

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



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

C言語入門(19) ありがたい構造体!!理解しやすくするために大活躍

Posted: 2012年12月20日

構造体(struct)は、今まで紹介していませんので
何なのかはさっぱりだと思います。

構造体は、変数をグルーピングすることができます。
グルーピングすることで何が良くなるのか



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

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

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言語入門(18) 様々な所で使われているポインターの意味 (2)

Posted: 2012年12月13日

前回も様々な種類のポインターを説明来ましたが
今回も同じ内容です。



カテゴリー: プログラム, 入門 | タグ: , , , | コメント無し »
Page 8 of 13« First456789101112Last »