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?我检查了我是否在测试程序中将正确的参数传递给了这个函数。

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 条件始终为真。

尝试类似:

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

使 while 循环继续进行,直到到达文件末尾。

于 2012-05-23T21:57:58.317 回答
2

iFile只是一个指向文件的指针。调用后它不再改变fopen。例如,作为循环中的条件,您需要使用 from 的返回值fgetc,因为这将告诉您是否已到达文件末尾。

于 2012-05-23T21:57:52.057 回答