
No.4ベストアンサー
- 回答日時:
★回答者 No.1 です。
追記。・回答者 No.2、No.3 さんの通り『EOF』は『EOFコード(^Z)』をバッファに
残すわけではありませんよ。→イメージ的には『あっている』のですよ。あくまで。
・厳密には、回答者 No.3 さんのアドバイスどおりです。
・つまり、『fgets』関数で1文字も読み取れなかった場合には、『ファイル終了』
というフラグ情報をセットするのです。→EOFをバッファに残す感じですね。
・そのため、次に読み込んだ場合に、このフラグ情報を『EOF』として読み取って
終了するわけです。→『fgetc』関数も同じ仕組みです。
・また、途中でエラーが発生した場合にも『fgets』関数は『NULL』を返します。
・この場合は、『エラー発生』のフラグ情報をセットしてから『NULL』を返すのです。
・よって『NULL』が返される多くの場合は、『ファイル終了』ですが、エラーが発生
しても『NULL』が返されます。そこで、『feof』関数や、『ferror』関数でどちらか
判定するわけです。feof(fp) や ferror(fp) で 0 以外が返されたら『ファイル終了』
や『エラー発生』と判別します。→厳密にエラー発生の対策をする場合はね。
・あと、一度『エラー発生』のフラグがセットされると『fseek』関数などではその
情報はクリアされません。→『clearerr』関数でクリアします。
・『ファイル終了』情報はファイル・ポインタの位置を変える『fseek』関数などで
その情報がクリアされます。
・『ファイル終了』、『エラー発生』のフラグ情報などは、それぞれのファイル
ポインタで管理されています。
最後に:
・イメージ的には、最後に『EOFを読み取り終了』という事になります。
・質問者さんは、プログラムや、テストプログラムを作って動作に疑問を持ったのですね。
そうでないと、『EOF』を検出して、1文字も読み取れなかった場合、配列内容が変化
しない事を推測できませんものね。
・そこで、最後にアドバイスします。
・疑問があったら簡単なテスト・プログラムを作ってみて確認することがとても大事ですよ。
動作確認すると『fgets』関数などの仕組みをより理解できますから。
・以上。おわり。
No.3
- 回答日時:
> 配列に1文字以上読み取れた場合、EOFをバッファに残し配列に'\0' を追加する。
EOFをバッファに残すのではなく、「ファイル終了表示子」をセットすることになります。
ちなみに、fgets関数がNULLを返すのは、EOFに達した場合だけではありません。読み込み途中にエラーが発生した場合にもNULLを返しますが、その場合は「エラー表示子」をセットし、配列の内容は不定になります。
No.2
- 回答日時:
EOFはキャラクタではないので、EOFがバッファに格納されることはないと思います。
DOS/Windows形式だと^Z がEOFを表すキャラクタとしてファイル中に存在する場合がありえますが、
その場合でも^Z自身がバッファに格納されることはなかったと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- C言語・C++・C# C#の問題です。 文字列型の配列 s[100] にキーボードから入力された100文字以内の文字列(単 2 2022/06/22 15:18
- Java Java 南京錠 2 2023/02/04 11:46
- Visual Basic(VBA) Vbaで数式をポーランド記法に変換するコードを作って実行しようとするとフリーズします。 1 2022/05/24 17:53
- Excel(エクセル) マクロでテキストファイルを読み込んだ際の最終セルにデータと改行が含まれる問題の改善方法 2 2022/03/25 16:50
- Microsoft ASP プログラミング関係で質問です。 3 2022/10/11 16:06
- その他(コンピューター・テクノロジー) 【Tableau Desktop】文字列から8桁の数字を日付型(yyyyMMdd)として取得 1 2023/07/31 10:17
- C言語・C++・C# pythonのファイルの並びでの読み込みとリストについて 4 2022/04/13 03:52
- その他(データベース) Accessのクエリで1フィールドの抽出条件設定をNullでなく全角半角含む空白のみの文字列でない文 1 2023/04/24 15:20
- Excel(エクセル) PowerQueryに詳しい方教えてください(Office365) 1 2022/07/24 21:11
このQ&Aを見た人はこんなQ&Aも見ています
-
fgetsなどのときのstdinのバッファを消すには?
C言語・C++・C#
-
nullと"、\\0とEOFの違いについて。
C言語・C++・C#
-
テキストファイルの行数を取得する方法(C言語
C言語・C++・C#
-
-
4
fgetsで拾われる改行文字を削除したい
C言語・C++・C#
-
5
fgets関数を使用したときの文字あふれについて
C言語・C++・C#
-
6
fgets( ) の返り値は何?
C言語・C++・C#
-
7
EOF判定されない
C言語・C++・C#
-
8
関数から配列を返すには?
C言語・C++・C#
-
9
改行を読み飛ばす
C言語・C++・C#
-
10
C言語 配列の長さの上限
C言語・C++・C#
-
11
ファイルから読み取った改行文字を消す方法
C言語・C++・C#
-
12
連結リスト 要素の入れ替え
C言語・C++・C#
-
13
c言語のポインタへの文字列入力についてです。
C言語・C++・C#
-
14
バッファとは何ですか
C言語・C++・C#
-
15
switch の範囲指定
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
fcloseで発生するエラーについて。
-
access テキストボックスの値取得
-
「パス名が無効です」の発生原因
-
gccを行ってもexeファイルが生...
-
Access2013にてドラッグ&ドロ...
-
Excel 2003 のエラーメッセージ
-
VBでファイルが開かれているか...
-
【関数】同じ関数なのに、エラ...
-
NAS上のファイルの使用中が解除...
-
ExcelVBAで既に開いてるwordを...
-
VBから参照できないCのDLLを使...
-
VB.NETでUnzip32.DLLを使うには?
-
郵便番号を表示させる関数のエ...
-
イベントが発生しない vba
-
PowerShellを使って関連付けら...
-
マクロについての質問
-
Returnに対するGoSubがありません
-
fgets関数のEOFの扱い方について
-
VBA ExecuteExcel4Macro 型が一...
-
Vba ファイル書き込み時に書き...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【関数】同じ関数なのに、エラ...
-
access テキストボックスの値取得
-
「パス名が無効です」の発生原因
-
ExcelVBAで既に開いてるwordを...
-
NAS上のファイルの使用中が解除...
-
Returnに対するGoSubがありません
-
gccを行ってもexeファイルが生...
-
PowerShellを使って関連付けら...
-
batファイルでレジストリキーの...
-
アクセスのクエリでコンパイル...
-
VB6 Dir関数で52エラー発生
-
エクセルマクロでエラーの原因...
-
VBでファイルが開かれているか...
-
【COBOL】read文でエラー
-
FTPの送信結果を検知したい
-
VBから参照できないCのDLLを使...
-
fgets関数のEOFの扱い方について
-
ACCESS VBAでのインポート
-
データベースソフトのアクセス2...
-
DisplayAlertsブロパティで ”実...
おすすめ情報