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? 我已经检查过我在测试程序中将正确的参数传递给了这个函数。
答案 0 :(得分:3)
你的循环体......
fputc(fgetc(iFile),oFile);
...没有改变循环的条件,所以它会永远运行。
而是尝试类似......
int c;
while((c = fgetc(iFile)) != EOF)
fputc(c, oFile);
一旦你到达输入文件的末尾,循环就会结束。
答案 1 :(得分:3)
条件不被忽视。 尝试类似: 使while循环继续,直到到达文件末尾。while(!feof(iFile))
fputc(fgetc(iFile),oFile);
答案 2 :(得分:2)
iFile
只是指向该文件的指针。致电fopen
后,它不再改变。作为循环中的条件,您需要使用fgetc
的返回值,因为这将告诉您是否已到达文件的末尾。