【发布时间】:2012-01-13 22:13:52
【问题描述】:
您好,我在 C 语言中有一个简单的复制文件程序,但我无法解释为什么我在使用第二种方法时在目标文件中得到不同的输出。 for循环的正确输出:
I am the worst programmer in the world!
:D
And this is bla bla bla bla
more bla bla bla...
但是使用 while 循环会在 EOF 中生成一个随机字符:
I am the worst programmer in the world!
:D
And this is bla bla bla bla
more bla bla bla...
代码是
int main()
{
int i;
char ch;
create_files();
FILE *src = fopen("best.txt", "r");
FILE *dst = fopen("copied.txt", "w");
for(i=getc(src); i!=EOF; i=getc(src)) //correct copy
{
putc(i, dst);
}
/* while(!feof(src)) //woot?
{
ch=fgetc(src);
fputc(ch,dst);
}*/
fclose(dst);
fclose(src);
return 0;
}
void create_files()
{
FILE *fp;
fp = fopen("best.txt","w");
fprintf(fp,"I am the worst programmer in the world!\n:D\n And this is bla bla bla bla\n more bla bla bla...\n");
fclose(fp);
}
我已经使用了 fputc 或 putc 和 fgetc 或 getc 并且仍然相同。我是不是忘记了什么?
【问题讨论】:
-
feof()不会像您认为的那样做。阅读文档。它不会测试下一次读取是否会尝试读取文件末尾;它检查最后一次失败读取尝试是否因为已经到达文件结尾而失败。 -
@pmg 是对的;
feof应该在循环之后使用以检查是否发生 EOF而不是错误。
标签: c file-copying fgetc getc