prev up next   top/contents search

comp.lang.c FAQ 列表· 问题 12.2

为什么简单的逐行复制循环while(!feof(infp)) { fgets(buf, MAXLINE, infp); fputs(buf, outfp); }会复制最后一行两次?


在 C 语言中,文件结束(end-of-file)仅在输入函数尝试读取但失败之后才会被指示。(换句话说,C 的 I/O 与 Pascal 的不同。)通常,您只需检查输入函数的返回值即可。

	while(fgets(buf, MAXLINE, infp) != NULL)
		fputs(buf, outfp);
几乎在所有情况下,都没有必要使用feof。(feof,或者更可能的是ferror,在 stdio 调用返回EOFNULL后,用于区分文件结束条件和读取错误。)

参考文献:K&R2 Sec. 7.6 p. 164
ISO Sec. 7.9.3, Sec. 7.9.7.1, Sec. 7.9.10.2
H&S Sec. 15.14 p. 382


prev up next   contents search
关于此 FAQ 列表   关于 Eskimo   搜索   反馈   版权

Eskimo North 托管