質問

の上 別の質問, ジェリー・コフィン 以下を指摘しました。

それは(おそらく)あなたの質問に実際には関係していませんが、 while (!feof(fileptr)){ ほぼ保証されたバグです。

そのコメントはややトピックではないので、私は別の質問を始めるだろうと思った。誰かが私にこれを説明できますか?これは、私が以前にストレートCで書いた最初のプログラムでした。

役に立ちましたか?

解決

この声明の理由はそれです feof ファイルの終了に到達したとき、まだ(最初に)falseです。ファイルの終了を過ぎて読み取ろうとする最初の失敗の試みの後にのみ真実になります。

したがって、

char mychar;
while(!feof(fileptr))
{
    fread(&mychar, sizeof(char), 1, fileptr);
    fprintf(stderr, "The char is '%c'.\n", mychar);
}

1つのcharを処理しすぎます。

正しい方法は、の返品値を確認することです fread (または読むために使用している関数)、あるいは電話をかける feof 読み取りを行う関数。例えば:

char mychar;
while(fread(&mychar, sizeof(char), 1, fileptr) > 0)
    fprintf(stderr, "The char is '%c'.\n", mychar);

他のヒント

Googleはこれを見つけます: http://www.drpaulcarter.com/cs/common-c-errors.php#4.2

「著者は、学生がFeof()機能を正しく使用しているのをまだ見ていない!」と書かれています。

要約すると、Cファイルは次のように機能します freadfwrite とにかくステータス値を返します u003Cblink>無視すべきではありませんu003C/blink>. 。の値を確認します feof 馬がすでに逃げた後、安定したドアを締めているものの1つです。

C FAQリストには次のとおりです 答え 他の多くのそのようなよくある質問への回答とともに:

Cでは、入力ルーチンが読み込もうとして失敗した後にのみ、ファイルの終わりが示されます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top