バグ:文字列のコピー

Posted: 2013年05月20日

文字列操作(文字のコピー)で書いてしまうバグを紹介します。

プログラムプログラム:

 #include <stdio.h>

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

    // 処理

    if (pArg != NULL) {
        free(pArg);
    }

    return 0;
 }

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



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

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

Posted: 2013年05月16日

前回から、ソート関数の解説しています。
今回も他のソート関数を解説していきます。



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

バグ:日付を文字列に変換

Posted: 2013年05月13日

文字列操作(日付を文字列に変換)で書いてしまうバグを紹介します。

プログラムプログラム:

 #include <stdio.h>

 int main(int argc, char *argv[])
 {
    time_t timer;
    struct tm *pTm;

    /* 現在時刻の取得 */
    time(&timer);

    /* 現在時刻を構造体に変換 */
    pTm = localtime(&timer);

    TCHAR *pszTime;
    pszTime = _tasctime(pTm);

    // 処理

    if (pszTime != NULL) {
        delete[] pszTime;
    }

    return 0;
 }

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



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

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

Posted: 2013年05月09日

前回から、ソート関数の解説しています。
今回も他のソート関数を解説していきます。



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

バグ:書式文字列の取得

Posted: 2013年05月06日

文字列操作(書式文字列の酒盗)で書いてしまうバグを紹介します。
sprintfで指定した書式で作成した文字列を取得することが可能です。
知ったかぶりをしていると痛い目にあってしまいます。

プログラムプログラム:

 #include <stdio.h>

 int main(int argc, char *argv[])
 {
    TCHAR strDest[256];
    sprintf(strDest, _T("%s is &d"), "A", 0x41);

    // 処理

    return 0;
 }

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



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

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

Posted: 2013年05月02日

前回まで、表示関数を解説してきました。
今回はソート関数を解説していきます。

ソート関数は表示関数同様に
フラグに応じて呼び出される処理が変化します。

ls.c main関数です。

    /* Select a sort function. */
    if (f_reversesort) {
        if (!f_timesort && !f_sizesort)
            sortfcn = revnamecmp;
        else if (f_sizesort)
            sortfcn = revsizecmp;
        else if (f_accesstime)
            sortfcn = revacccmp;
        else if (f_birthtime)
            sortfcn = revbirthcmp;
        else if (f_statustime)
            sortfcn = revstatcmp;
        else        /* Use modification time. */
            sortfcn = revmodcmp;
    } else {
        if (!f_timesort && !f_sizesort)
            sortfcn = namecmp;
        else if (f_sizesort)
            sortfcn = sizecmp;
        else if (f_accesstime)
            sortfcn = acccmp;
        else if (f_birthtime)
            sortfcn = birthcmp;
        else if (f_statustime)
            sortfcn = statcmp;
        else        /* Use modification time. */
            sortfcn = modcmp;
    }

先頭から順に解説していきます。
今回は、revnamecmp関数です。



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

バグ:コンソール入力処理でバッファーオーバフロー

Posted: 2013年04月29日

文字列操作(キーボード入力受付)で書いてしまうバグを紹介します。
前回も、キーボード受付処理での話題でしたが
前回とは、異なる関数での話題です。

プログラムプログラム:

 #include <stdio.h>

 int main(int argc, char *argv[])
 {
    TCHAR szBuf[256];

    // 入力要求
    gets(szBuf);

    // 処理

    return 0;
 }

このプログラムにどのように文字列操作(キーボード受付処理)にバグが存在すると思いますか?



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

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

Posted: 2013年04月25日

前回まで、printstream関数を解説してきました。
今回は同じ表示処理のprintcol関数を解説していきます。



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

バグ:scanfで無限ループ!!簡単に起きるけど対策は・・・

Posted: 2013年04月22日

文字列操作(入力文字)で書いてしまうバグを紹介します。

プログラムプログラム:

#include <stdio.h>

int main(void)
{
    int n = 0;
    while (n != -1) {
        puts("input:");
        scanf(" %d", &n);
        printf("result: %dn", n);
    }

    return 0;
}

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



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

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

Posted: 2013年04月18日

前回まで、printlong関数を解説してきました。
今回は同じ表示処理のprintstream関数を解説していきます。



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