C语言:feof函数的坑

引言

做课设的时候踩到这个坑,跟大家分享一下

feof()函数

看一下下面的代码

#include<stdio.h>
int main()
{
	FILE *fp = fopen("try", "w");
	if (feof(fp) == 1)
		puts("文件已结束");
	else
		puts("文件未结束");

	return 0;
}

输出:文件未结束
照理说,w参数打开的文件里面应该只有EOF才对啊,为什么会返回0呢?

查阅资料后:

feof函数
检测流上的文件结束符,如果文件结束,则返回非0值,否则返回0(即,文件结束:返回非0值,文件未结束,返回0值)

int feof(FILE *stream);

注意:feof判断文件结束是通过读取函数fread/fscanf等返回错误来识别的,故而判断文件是否结束应该是在读取函数之后进行判断。比如,在while循环读取一个文件时,如果是在读取函数之前进行判断,则如果文件最后一行是空白行,可能会造成内存错误。

原来出错的原因在这里,建议改成如下形式:

#include<stdio.h>
int main()
{
	FILE *fp = fopen("try", "w");
	char temp[50];
	if (fread(temp, sizeof(temp), 1, fp) != 1)
		puts("文件已结束");
	else
		puts("文件未结束");

	return 0;
}

输出:文件已结束
直接利用读文件函数的返回值来判断是否到达结尾。

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值