バグ:ファイルの更新時刻に2038年問題がある

Posted: 2013年08月14日

ファイルの更新時刻する際によく書いてしまうバグを紹介します。

今回は、64bit環境が前提として記載しています。

プログラムプログラム:

 #include  <stdio.h>
 #include  <Windows.h>

 int main(int argc, char *argv[])
 {
     FILE *fp;
     fp = fopen(argv[1],"r");
     if (fp == NULL) {
        // ファイルが開けない
        return 1;
     }

    struct stat sStat;
    fstat(fp, &sStat);

    // 処理

    return 0;
 }

このプログラムにどのようなファイル更新時刻取得のバグがあると思いますか?



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

バグ:大きいサイズのファイルサイズ取得したくて正しく取得できない

Posted: 2013年08月05日

ファイルのサイズ取得で書いてしまうバグを紹介します。

プログラムプログラム:

 #include <stdio.h>

 int main(int argc, char *argv[])
 {
     FILE *fp;
     fp = fopen(argv[1],"r");
     if (fp == NULL) {
        // ファイルが開けない
        return 1;
     }

     // ファイルの最後の位置へ移動しファイルサイズを取得
     long nfileSize = _filelength(fp);

    // 処理

     delete[] pFileData;

    return 0;
 }

このプログラムにどのようにファイルサイズ取得処理にバグが存在すると思いますか?



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

バグ:大きいサイズのファイルを読み込むとエラーになる

Posted: 2013年07月29日

ファイルの読み込み処理プログラムで書いてしまうバグを紹介します。

プログラムプログラム:

 #include <stdio.h>

 int main(int argc, char *argv[])
 {
     FILE *fp;
     fp = fopen(argv[1],"r");
     if (fp == NULL) {
        // ファイルが開けない
        return 1;
     }

     // ファイルの最後の位置へ移動しファイルサイズを取得
     fseek(fp, 0, SEEK_END);
     long nFileSize = ftell(fp);

     // 先頭から読み込むため移動
     fseek(fp, 0, SEEK_SET);

     char *pFileData = new char[nFileSize];
     fread(pFileData, sizeof(char), nFileSize, fp);

    // 処理

     delete[] pFileData;

    return 0;
 }

このプログラムにどのようにファイルの読み込み処理にバグが存在すると思いますか?



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

バグ:フォルダの移動

Posted: 2012年10月10日

フォルダを移動する際によく書いてしまうバグを紹介します。

プログラムプログラム:

 #include  <stdio.h>
 #include  <Windows.h>

 int main(int argc, char *argv[])
 {
    char *pszDirPath = _T("C:\aaa\bbb\ccc");
    char *pszNewDirPath = _T("D:\aaa\bbb\ddd");

    // フォルダの削除
    if( ::MoveFile(pszDirPath, pszDirPath) == 0 ) {
        return -1;
    }

    return 0;
 }

このプログラムにどのようなフォルダ移動関連のバグがあると思いますか?



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

バグ:フォルダの作成

Posted: 2012年08月18日

フォルダを作成する際によく書いてしまうバグを紹介します。

プログラムプログラム:

 #include  <stdio.h>
 #include  <Windows.h>

 int main(int argc, char *argv[])
 {
    char *pszDirPath = "C:\aaa\bbb\ccc";

    // フォルダの作成
    if( ::CreateDirectory(pszDirPath, NULL) == 0 ) {
        return -1;
    }

    // 処理

    return 0;
 }

このプログラムにどのようなフォルダ作成関連のバグがあると思いますか?



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

バグ : パスが決まっているファイルを開く

Posted: 2012年04月04日

パスが決まっているファイルを開くプログラムでよく書いてしまうバグを紹介します。
パスが決まっているファイルとは、
Windowsのファイル(cmd.exe等)や、設定ファイル(???.ini等)

プログラムプログラム:

 #include  <stdio.h>

 int main(int argc, char *argv[])
 {
    char *pstrFilePath = ".setting.ini";
    std::ifstream istream(pstrFilePath, std::ios::in);
    if (istream.fail() == true) {
        // ファイルのオープンに失敗
        return -1;
    }

    // 読み込み処理

    istream.close();

    return 0;
 }

このプログラムにどのようなファイル操作関連のバグがあると思いますか?



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

バグ : ファイルを上書きする

Posted: 2012年03月23日

ファイルを上書きするプログラムでよく書いてしまうバグを紹介します。

プログラムプログラム:

 #include  <stdio.h>

 int main(int argc, char *argv[])
 {
    std::ofstream ostream(argv[1], std::ios::out);
    if (ostream.fail() == true) {
        // ファイルのオープンに失敗
        return -1;
    }

    // 書き込み処理
    for (int nIndex = 1; nIndex < argc; nIndex++) {
        ostream.write(argv[nIndex], strlen(argv[nIndex]));
    }

    ostream.close();

    return 0;
 }

このプログラムにどのようなファイル操作関連のバグがあると思いますか?



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

バグ : ファイルの属性を変更する

Posted: 2011年10月06日

ファイルの属性を変更する際のバグを紹介します。

具体的にファイルの属性とは、
読み取り専用や、隠しファイル、所有者などです。

プログラムプログラム:

 #include  <stdio.h>
 #include  <unistd.h>

 int main(int argc, char *argv[])
 {
    if (access(argv[1], 1) != 0) {
        // ファイルへアクセス権がない、ファイルが存在しない
        return -1;
    }

    SetFileAttributes(argv[1], FILE_ATTRIBUTE_HIDDEN);

    return 0;
 }

このプログラムにどのようなファイル操作関連のバグがあると思いますか?



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

バグ : ファイルに書きこむ

Posted: 2011年09月03日

前回変数がプログラムの説明で出てきましたが
変数って一体何なんでしょうか?

変数と聞いて数学の変数を思い出す方もいるのではないでしょうか。
大まかなイメージは同じですが全く同じ物と思っていると、
泥沼に突っ込んでしまうので気をつけてください。

Wikipedia
変数 (数学)
変数 (プログラミング)

プログラミングの変数とは、
よく言われる喩えは、データを入れる箱(領域)です。
どういうことか以下のプログラムを見てください。

プログラムプログラム:

 #include  <stdio.h>

 int main(void)
 {
     int nResult = 0;
     nResult = 2;
     nResult = nResult * 5 + 3;
     nResult = nResult * -1;

     return 0;
 }



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

バグ : ファイルを開く

Posted: 2011年08月30日

ファイルを開くプログラムでよく書いてしまうバグを紹介します。

プログラムプログラム:

 #include <fstream>

 int main(int argc, char *argv[])
 {
    std::ofstream ostream(argv[1]);

    //
    // 書き込み処理
    //

    ostream.close();

    return 0;
 }

このプログラムにどのようなファイル操作関連のバグがあると思いますか?



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