ソースには一切手を加えず、(5)ファイルのクローズでエラー表示させる方法はないでしょうか。
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
FILE *fp;/* (1)ファイルポインタの宣言 */
char s[256];
/* (2)ファイルのオープン */
/* ここで、ファイルポインタを取得する */
if ((fp = fopen("smpl.txt", "r")) == NULL) {
printf("file open error!!\n");
exit(EXIT_FAILURE);/* (3)エラーの場合は通常、異常終了する */
}
/* (4)ファイルの読み(書き)*/
while (fgets(s, 256, fp) != NULL) {
/* ここではfgets()により1行単位で読み出し */
printf("%s", s);
}
if((fclose(fp)) == EOF){/* (5)ファイルのクローズ */
Logging(cfancname, 2);
printf("ファイルクローズに失敗しました\n");
return -1;
}
return 0;
}
宜しくお願いします。
A 回答 (6件)
- 最新から表示
- 回答順に表示
No.6
- 回答日時:
本題とは関係ないのですが、
> exit(EXIT_FAILURE); /* (3)エラーの場合は通常、異常終了する */
> return -1;
> return 0;
統一が取れていないのと、-1を返すのはあまりよろしくないかと。
上から順に、
return EXIT_FAILURE;
return EXIT_FAILURE;
return EXIT_SUCCESS;
とするか、
return 1;
return 1;
return 0;
がいいかと。
No.5
- 回答日時:
たぶん、fclose()がエラーのケースで、
Loggingやprintfが正しく動作するか
走行確認したいのだと思いますが、
おそらくfclose()のエラーは、入力パラメータ(ファイルポインタ)が
不正なケースでしか発生しないと思います。
http://www.linux.or.jp/JM/html/LDP_man-pages/man …
私だったら、
if((fclose(fp)) == EOF){ /* (5)ファイルのクローズ */
の実行直前に、デバッガでfpの値をNULLに変更して続行させます。
No.4
- 回答日時:
本物じゃないfopen~fcloseを作りリンクしてテストするしかないでしょう。
http://yougo.ascii.jp/caltar/%E3%82%B9%E3%82%BF% …
こういう場合に使うモジュールをスタブと呼びます。
No.3
- 回答日時:
要は、動作確認をしたいが、動作確認後、ソースを変えたくない
というのが、質問の趣旨であれば、
int ret;の変数を確保し
if((fclose(fp)) == EOF){ /* (5)ファイルのクローズ */
を
ret = fclose(fp); (1)
if (ret == EOF){ (2)
の2行に分けます。
デバッガで(1)を実行した後、(2)で止めます。
その後、ret にEOFの値をセットします。
その後、実行を再会します。
もちろん、デバッグ完了後も、
ソースは(1)と(2)に分けたままにしておきます。
No.2
- 回答日時:
環境依存かつとてもシビアなタイミングになりうるけど「ファイルが存在するデバイスそのものを切り離す」とかやるとできるかもしれない.
「(5)ファイルのクローズでエラー表示させる」の意味が今一つ分かりませんが. 純粋に「fclose の中でエラー表示させる」という意味だとむしろ「どれだけプログラムをいじっても無駄」だし.
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# #include <stdio.h>int main(void) { int buf[100] = 6 2022/11/01 22:45
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# C言語のファイル入力が分かりません 2 2022/05/22 06:35
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- Visual Basic(VBA) 動かなくなってしまった古いVBAを動くようにしたい 8 2022/09/20 13:57
- Visual Basic(VBA) Excel-VBAでのファイルの開き方 4 2023/02/14 11:01
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教える店舗&オフィスのセキュリティ対策術
中・小規模の店舗やオフィスのセキュリティセキュリティ対策について、プロにどう対策すべきか 何を注意すべきかを教えていただきました!
-
fcloseで発生するエラーについて。
C言語・C++・C#
-
openした後、closeしないでプログラムを終了するとどうなりますか?
Perl
-
close()で例外が投げられる理由
Java
-
-
4
char str[256]の256の意味は?
C言語・C++・C#
-
5
fopne で失敗する原因
C言語・C++・C#
-
6
procってなんですか?
C言語・C++・C#
-
7
ファイルから読み込んだデータを構造体に格納できますか?
C言語・C++・C#
-
8
fopenでエラーとなる
C言語・C++・C#
-
9
数字以外が入力されたらエラー文を出したい。
C言語・C++・C#
-
10
ファイル書込みで一行もしくは部分的に上書きする
PHP
-
11
freadでデータがない場合の読込値は?
C言語・C++・C#
-
12
どんなプログラムを書いても指定されたファイルが見つかりません。と出てきます。どうやったら解決しますか
C言語・C++・C#
-
13
C 開放してるのにエラー(double free or corruption (!prev))がでる
C言語・C++・C#
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Returnに対するGoSubがありません
-
【COBOL】read文でエラー
-
「アクティブ ユーザーが多すぎ...
-
FTPの送信結果を検知したい
-
VBでファイルが開かれているか...
-
Access2010 コンパイルエラー...
-
エクセル VBA dll 読み込...
-
batファイルでレジストリキーの...
-
アクセスのクエリでコンパイル...
-
VB6 Dir関数で52エラー発生
-
イベントが発生しない vba
-
ExcelVBAで既に開いてるwordを...
-
FORTRANの実行エラーについて
-
RAR圧縮ファイル(分割)の順番が...
-
VB:「実行時エラー53 実行ファ...
-
gccを行ってもexeファイルが生...
-
ファイルクローズ(fclose)でエ...
-
fgets関数のEOFの扱い方について
-
[VBS]ファイルコピーで怪奇現象
-
freadでデータがない場合の読込...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBでファイルが開かれているか...
-
batファイルでレジストリキーの...
-
gccを行ってもexeファイルが生...
-
「パス名が無効です」の発生原因
-
Returnに対するGoSubがありません
-
アクセスのクエリでコンパイル...
-
NAS上のファイルの使用中が解除...
-
VBから参照できないCのDLLを使...
-
PowerShellを使って関連付けら...
-
Adobeのプレミアプロの書き出し...
-
EXCELのVBAでWORDが開いてある...
-
FTPの送信結果を検知したい
-
access テキストボックスの値取得
-
エクセルマクロでエラーの原因...
-
【COBOL】read文でエラー
-
VB6 Dir関数で52エラー発生
-
VBA ExecuteExcel4Macro 型が一...
-
Access2013にてドラッグ&ドロ...
-
freadでデータがない場合の読込...
-
ファイルクローズ(fclose)でエ...
おすすめ情報