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)

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

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



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

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

Posted: 2012年12月27日

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

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

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



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

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

Posted: 2012年12月20日

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

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



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

C言語入門(18) 様々な所で使われているポインターの意味 (2)

Posted: 2012年12月13日

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



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

C言語入門(17) 様々な所で使われているポインターの意味

Posted: 2012年12月03日

様々な箇所で使用されているポインターの意味がわかれば
その処理を正しく実装ができる
ポインターをわかっていてもそのポインターの意味するものを間違えると
損している場合もあるのでここで押さえていきたい!!
例えば、FILE*とか
詳しくは把握していないので推論しか書いていませんが・・・



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

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

Posted: 2012年11月28日

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



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

バグ:文字列のコピーでやりがちな・・・

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

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



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

C言語入門(16) ポインターはわかったけど参照(&)って?

Posted: 2012年11月21日

これまでの解説でポインター(*)について書いてきましたが
参照(&)とは何か

参照では、自身のメモリーアドレスを返します。

int nResult = *(&var);

この場合は、自身のアドレスを取得後
nResultにそのアドレスの値を代入します。
つまり

int nResult = var;

と同様
「*と&は逆の操作ができる」と覚えることを薦めます。

実際にはどのような使い方をしているのでしょうか?



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