C库函数fread不会读出EOF

C库函数fread不会读出EOF,第1张

C库函数fread不会读出EOF 问题: fread不会读出EOF

由于文件读写较慢,为加快程序速度,采用一定缓冲区分批读入文件。 本来是以EOF为循环跳出条件,可是竟陷入了死循环。

输出读到的内容,从文件中读入这样一句话,果然是没有EOF的。

好奇为何会这样,我打开了fread函数的源码,发现它的实现是这样的:

实现方法

  1. 如果文件流已缓冲且存在字符,则读入(最多或所有)字符
  2. 如果文件缓冲区没有字符,则处理EOF或fail。对于EOF的处理方法为:读取EOF并返回数目,不将EOF加入读取buf中。这也就是fopen读取内容没有EOF的原因。
  3. 如果流没有缓冲区,或者流缓冲区已满,没有足够的空间进行直接读取,所以使用特殊函数进行读取
解决方案:

根据返回的int值:实际读到的元素数和最大读入大小比较,判断是否文件结束。

int n=fread(buf, 1, BUFSIZE, fp);
	if (n < BUFSIZE)
		buf[n] = EOF;
 源码:

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/3971603.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-10-21
下一篇 2022-10-21

发表评论

登录后才能评论

评论列表(0条)

保存