0
void echoFileA(const char* iPath,const char* oPath)
{
    FILE* iFile;
    FILE* oFile;

    iFile = fopen(iPath,"rb");
    oFile = fopen(oPath,"wb");

    while(iFile)    
        fputc(fgetc(iFile),oFile);

    fclose(iFile);
    fclose(oFile);
}

この手順は純粋に楽しみのために書かれています。すべての OS API ライブラリにファイルをコピーするための便利な既製の関数があることを私は知っています。トピックに戻りますが、ずっと前に EOF に達した場合でも、ループ条件が常に true になるのはなぜですか? テスト プログラムで、この関数に正しいパラメーターを渡したことが確認されました。

4

3 に答える 3

3

あなたのループの本体...

   fputc(fgetc(iFile),oFile);

... ループの条件を変更することは何もないため、永久に実行されます。

代わりに次のようなものを試してください...

int c;
while((c = fgetc(iFile)) != EOF) 
   fputc(c, oFile);

入力ファイルの最後に達すると、ループは終了します。

于 2012-05-23T21:57:44.210 に答える
3

条件は無視されていません。iFile はポインターであり、このポインターは決して NULL (または 0) ではないため、while 条件は常に true です。

次のようなものを試してください:

while(!feof(iFile))    
        fputc(fgetc(iFile),oFile);

ファイルの最後に到達するまで while ループを継続させる。

于 2012-05-23T21:57:58.317 に答える
2

iFileファイルへの単なるポインタです。を呼び出した後は、もう変更されませんfopen。ループ内の条件として、たとえば からの戻り値を使用する必要がfgetcあります。これにより、ファイルの最後に到達したかどうかがわかります。

于 2012-05-23T21:57:52.057 に答える