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も見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
C言語のポインターに関する警告
C言語・C++・C#
-
CStringからchar*への型変換について教えてください。
C言語・C++・C#
-
fgets( ) の返り値は何?
C言語・C++・C#
-
-
4
エラーの意味は? Lvalue required
C言語・C++・C#
-
5
fgetsなどのときのstdinのバッファを消すには?
C言語・C++・C#
-
6
fgetc関数について
C言語・C++・C#
-
7
fopne で失敗する原因
C言語・C++・C#
-
8
nullと"、\\0とEOFの違いについて。
C言語・C++・C#
-
9
ファイルから読み取った改行文字を消す方法
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「パス名が無効です」の発生原因
-
RAR圧縮ファイル(分割)の順番が...
-
PowerShellを使って関連付けら...
-
DisplayAlertsブロパティで ”実...
-
gccを行ってもexeファイルが生...
-
メニューのショートカットキー
-
Microsoft Photo Editorのエラ...
-
DOCUMENT行の書き出しについて-...
-
システムのシャットダウンは既...
-
Adobeのプレミアプロの書き出し...
-
Excel VBAのApplication.Execut...
-
VBA ExecuteExcel4Macro 型が一...
-
兵庫県教員採用試験の願書記入...
-
VBでファイルが開かれているか...
-
構造体をランダムファイルに書...
-
外付けHDDが調子悪い 故障の前...
-
「複数の選択範囲に対して実行...
-
ISOファイルとMDSファイル
-
生鮮MDシステムについて。
-
差し込み印刷の元データファイ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
gccを行ってもexeファイルが生...
-
VBでファイルが開かれているか...
-
「パス名が無効です」の発生原因
-
batファイルでレジストリキーの...
-
VBから参照できないCのDLLを使...
-
FTPの送信結果を検知したい
-
access テキストボックスの値取得
-
PowerShellを使って関連付けら...
-
Returnに対するGoSubがありません
-
アクセスのクエリでコンパイル...
-
OUTLOOK VBA 指定フォルダ内の...
-
Adobeのプレミアプロの書き出し...
-
EXCELのVBAでWORDが開いてある...
-
NAS上のファイルの使用中が解除...
-
すでにファイルが開かれている...
-
VB6 Dir関数で52エラー発生
-
FORTRANの実行エラーについて
-
Excelvbaのマクロのファイル名...
-
Excelファイルのマクロによる排...
-
エクセルマクロでエラーの原因...
おすすめ情報