なぜこのCコードがバギーなのですか?
-
22-09-2019 - |
解決
この声明の理由はそれです 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ファイルは次のように機能します fread
と fwrite
とにかくステータス値を返します u003Cblink>無視すべきではありませんu003C/blink>. 。の値を確認します feof
馬がすでに逃げた後、安定したドアを締めているものの1つです。
C FAQリストには次のとおりです 答え 他の多くのそのようなよくある質問への回答とともに:
Cでは、入力ルーチンが読み込もうとして失敗した後にのみ、ファイルの終わりが示されます。
所属していません StackOverflow