0

fgetc()現在、ファイル全体を読み取るために in loop を使用しています。

しかしEOF、このループの 2 回の繰り返しで検出する必要があります。をEOF使用してストリームに戻すことはできませんungetc()

使用について

fseek(file, -1, SEEK_CUR)

EOF使用する前に入手fseekして再度読むのは安全で持ち運び可能ですか?

ありがとう。

4

2 に答える 2

1

ほとんどのオペレーティングシステムでEOFは、はファイルに存在する物理的な文字ではありません。fgetc()これは、入力がなくなったことを知らせるために戻ってくる、単なる仮想の「帯域外」文字です。

なぜあなたはEOF再び得る必要があるのでしょうか?ファイルにこれ以上データがないので、ファイルの終わりに再び到達するために「バックアップ」することのポイントは何ですか?

于 2012-11-08T14:52:40.657 に答える
1

使用できます

fseek(file, 0, SEEK_END)

そこから読み取ろうとすると、2 番目の EOF が返されます。

編集:

リファレンスをより注意深く読む:「ライブラリの実装は、意味のある SEEK_END をサポートしないことが許可されています (したがって、それを使用するコードには、実際の標準の移植性はありません)。」

あなたのソリューションは、移植性の点で最良のものだと思います。

fseekには注意してください(これはあなたのケースではないので注意してください):fseekを使用してバックトラックする

于 2012-11-08T15:34:39.463 に答える