由于文件读写较慢,为加快程序速度,采用一定缓冲区分批读入文件。 本来是以EOF为循环跳出条件,可是竟陷入了死循环。
输出读到的内容,从文件中读入这样一句话,果然是没有EOF的。
好奇为何会这样,我打开了fread函数的源码,发现它的实现是这样的:
实现方法- 如果文件流已缓冲且存在字符,则读入(最多或所有)字符
- 如果文件缓冲区没有字符,则处理EOF或fail。对于EOF的处理方法为:读取EOF并返回数目,不将EOF加入读取buf中。这也就是fopen读取内容没有EOF的原因。
- 如果流没有缓冲区,或者流缓冲区已满,没有足够的空间进行直接读取,所以使用特殊函数进行读取
根据返回的int值:实际读到的元素数和最大读入大小比较,判断是否文件结束。
int n=fread(buf, 1, BUFSIZE, fp); if (n < BUFSIZE) buf[n] = EOF;源码:
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)