fgetc()
現在、ファイル全体を読み取るために in loop を使用しています。
しかしEOF
、このループの 2 回の繰り返しで検出する必要があります。をEOF
使用してストリームに戻すことはできませんungetc()
。
使用について
fseek(file, -1, SEEK_CUR)
EOF
使用する前に入手fseek
して再度読むのは安全で持ち運び可能ですか?
ありがとう。
ほとんどのオペレーティングシステムでEOF
は、はファイルに存在する物理的な文字ではありません。fgetc()
これは、入力がなくなったことを知らせるために戻ってくる、単なる仮想の「帯域外」文字です。
なぜあなたはEOF
再び得る必要があるのでしょうか?ファイルにこれ以上データがないので、ファイルの終わりに再び到達するために「バックアップ」することのポイントは何ですか?
使用できます
fseek(file, 0, SEEK_END)
そこから読み取ろうとすると、2 番目の EOF が返されます。
編集:
リファレンスをより注意深く読む:「ライブラリの実装は、意味のある SEEK_END をサポートしないことが許可されています (したがって、それを使用するコードには、実際の標準の移植性はありません)。」
あなたのソリューションは、移植性の点で最良のものだと思います。
fseekには注意してください(これはあなたのケースではないので注意してください):fseekを使用してバックトラックする