C言語関係掲示板

過去ログ

No.605.ファイルオープン時のエラー処理

[戻る] [ホームページ]
No.5783

エラー処理
投稿者---ナルト(2003/04/14 11:57:14)


現在以下のプログラムのエラー処理をどう付け加えれば良いか苦慮しております。良きアドバイスお願いします。
#include <stdio.h>

main(int argc, char *argv[])

FILE *fp;
int c;

fp = fopen(argv[1], "r");
while ((c = getc(fp)) != EOF) {
putchar(c);
}
fclose(fp);
return 0;
}

No.5784

Re:エラー処理
投稿者---aki(2003/04/14 13:23:43)


このプログラムでは次の2つのエラーが考えられます。

  1. プログラム実行時にコマンドラインからファイル名を指定しなかったために、
     argv[1] にファイル名へのポインタがセットされなかった(その場合 argv[1] 
     には NULL がセットされている)。

  2. ファイルが存在しない、存在してもアクセスできない、などの理由で
     ファイルのオープンに失敗し、fp に NULL がセットされた。

どちらの場合も stderr にエラーメッセージを出力してプログラムを終了するだけで
よさそうです。

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
    FILE *fp;
    int c;

    if (argv[1] == NULL)
        fprintf(stderr, "ファイル名を指定してください。"), exit(1);
    
    fp = fopen(argv[1], "r");
    if (fp == NULL)
        fprintf(stderr, "ファイルのオープンに失敗しました"), exit(1);

    while ((c = getc(fp)) != EOF)
        putchar(c);
    fclose(fp);
    return 0;
}


No.5794

Re:エラー処理
投稿者---ナルト(2003/04/14 20:26:50)


ご返答いただきありがとうございます。的確なご指摘大変よくわかりました。