C言語入門(46) 実際にプログラムを読んで理解を深めよう tail編(1)

Posted: 2013年06月27日

前回まででC言語の勉強に適していると言われる
lsコマンドのソースを解説してきました。

そのシリーズとして今回からtailコマンドのソースを解説していきます。

tailsコマンドは、

  • ファイルの最後の方のデータを表示
  • ファイルの値をリアルタイムで表示

します。

よくログファイルの監視に使用したりします!!

最新のtailコマンドのソースは
http://www.freebsd.org/cgi/cvsweb.cgi/src/usr.bin/tail/
です。

今回解説するソース
/wp-content/uploads/2013/06/tail.zip
です。

前回と同様に初回はエントリーポイントから
tail.c main関数です。



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

バグ:文字列配列の初期化でゴミが残る

Posted: 2013年06月24日

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

プログラムプログラム:

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

 int main(int argc, char *argv[])
 {
    TCHAR strDest[256];
    strset(szDest, NULL);

    // 処理

    return 0;
 }

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



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

C言語入門(45) 実際にプログラムを読んで理解を深めよう ls編(19)

Posted: 2013年06月20日

前回はユーティリティのlen_octal関数に書きました。
今回は、prn_octal関数です。



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

バグ:環境変数の変更処理でたまに異常な状況となる

Posted: 2013年06月17日

文字列中に環境変数を変更する処理でよく書いてしまうバグを紹介します。

プログラムプログラム:

 #include <stdio.h>
 $include <winbase.h>

 int main(int argc, char *argv[])
 {
    TCHAR *pszEnv;
    pszEnv = _tgetenv(_T("JAVA_HOME"));

    if (strlen(pszEnv) == 0) {
        strcpy(pszEnv, _T("C:Program filesJavabin"));
    }

    // 処理

    return 0;
 }

このプログラムにどのように文字列中に環境変数を変更する処理が間違えていると思いますか?



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

C言語入門(44) 実際にプログラムを読んで理解を深めよう ls編(18)

Posted: 2013年06月13日

前回はユーティリティのprn_printable関数に書きました。
今回は、len_octal関数です。

前回の関数とは、名称が異なるため
違う処理を行うかと思いきや

ほとんど似たような処理です。



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

バグ:大文字・小文字変換区別せずに比較できたと思ったら

Posted: 2013年06月10日

文字列操作(大文字・小文字変換)で書いてしまうバグを紹介します。

プログラムプログラム:

 #include <stdio.h>

 int main(int argc, char *argv[])
 {
    char *pArg = _strupr(argv);

    if (strstr(pArg, "-A") == NULL) {
        printf("%sは指定できません", argv);
        return -1;
    }

    // 処理

    return 0;
 }

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



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

C言語入門(43) 実際にプログラムを読んで理解を深めよう ls編(17)

Posted: 2013年06月06日

前回はユーティリティのprn_normal関数に書きました。
今回は、似たような関数prn_printable関数です。

printable: 表示可能?
前回のprn_normalも表示チェックをしていましたが
何が違うんでしょうか



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

バグ:エラーメッセージの取得ではどのAPIを使うべきか

Posted: 2013年06月03日

文字列操作(エラーメッセージの取得)で書いてしまうバグを紹介します。

プログラムプログラム:

 #include <stdio.h>

 int main(int argc, char *argv[])
 {
    char szErrorMsg[256];
    int nErrorNo;

    // 処理

    _strerror_s(szErrorMsg, 256, nErrorNo);
    puts(szErrorMsg);

    return 0;
 }

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



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

C言語入門(42) 実際にプログラムを読んで理解を深めよう ls編(16)

Posted: 2013年05月30日

今回からユーティリティ関数の解説です。
今まで解説してきた箇所で呼ばれているため
簡単に解説したかもしれませんがここでは、しっかりと書いていきます。



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

バグ:ファイルパスからファイル名の抜き出し

Posted: 2013年05月27日

文字列操作(ファイルパスからファいうr名を取得する処理)で書いてしまうバグを紹介します。
今回は、独自の方法であり
他の方法で取得することもできます
一例という事で

プログラムプログラム:

 #include <stdio.h>

 int main(int argc, char *argv[])
 {
    CString strFilePath = _T("C:Temptest.txt");

    int index = strFileName.ReverseFind(_T(""));
    if (index == -1) {
        // 見つからない
        return;
    }
    CString strFileName = strFileName.Mid(index);

    // 処理

    return 0;
 }

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



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