无限文件输出

时间:2012-05-23 21:51:41

标签: c

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

3 个答案:

答案 0 :(得分:3)

你的循环体......

   fputc(fgetc(iFile),oFile);

...没有改变循环的条件,所以它会永远运行。

而是尝试类似......

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

一旦你到达输入文件的末尾,循环就会结束。

答案 1 :(得分:3)

条件不被忽视。

尝试类似:

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

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

答案 2 :(得分:2)

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