C语言文件的一些操作和编译预处理

本文详细探讨了C语言中文件读取的结束判断误区,重点讲解了feof和文件缓冲区的概念,以及编译预处理在程序执行流程中的作用。通过实例演示了如何正确判断文本和二进制文件结束,并介绍了文件操作中的缓冲区管理技巧。
摘要由CSDN通过智能技术生成

文章目录


前言

       在C语言学习中,我们会学到一些文件的操作,和编译预处理的知识,这里我只讲到文件操作的一部分。如果内容有错误,愿意倾听指点,共同学习,共同进步 ~0,0~

一、文件读取结束的判断

       在判断文件读取结束的时候,我们通常可以用feof函数的返回值直接用来判断文件的结束,但这是错误的方式,因为feof函数是应用于当文件读取结束的时候,判断文件是读取失败结束,还是遇到文件尾结束,这和判断文件结束可是两码事,我们需要注意。

  1.文本文件读取是否结束,我们可以判断返回值是否为EOF(end of file)  或者 是NULL

       例如,我们可以用fgetc这个函数, 这个函数是当文件读取失败的时候或者遇到文件尾的时候,都会返回EOF  否则获取这个字符,用fgets来判断是否为NULL

     所以,我们可以判断fgetc是否为EOF  ,fgets返回值是否为NULL

2.二进制文件的读取结束时候的判断,我们可以判断返回值是否小于实际要读的个数

        例如,我们可以用fread这个函数判断返回值是否小于实际要读的个数

让我们可以看下下面这个例子:

int main()
{
	int c;//要处理EOF ,用int  而非char
	FILE* fp = fopen("test.txt", "r");
	if (!fp)
	{
		perror("File opening failed");
		return 1;
	}
	//fgetc 当读取失败的时候或者遇到文件结束的时候,都会返回EOF
	while ((c = fgetc(fp)) != EOF)
	{
		putchar(c);
	}
	//判断是什么原因结束的
	if (ferror(fp))//是因为读取失败结束
	{
		puts("I/O error when reading");
	}
	else if (feof(fp))//是因为遇到了文件尾结束
		puts("End of file reached successfully");
	fclose(fp);

    return 0;
}

二、文件缓冲区

    其实在ANSIC标准,也就是C语言标准,是由采用“缓冲文件系统”处理的数据文件的,文件缓冲区也就是系统在为每一个使用的文件开辟一块“文件缓冲区”,他们之间会有下面这样的关系

    通常,文件是文件在进行操作时,需要做刷新缓冲区或者文件操作结束时关闭文件

不写,可能导致读写文件的问题

三、编译预处理

程序在ANSIC的任何一种实现中,都会经历两个不同的环境

第一种是翻译环境,第二种是执行环境,用于实际执行代码(如下图)

 程序都会进行这两个环境才会最终运行,期间每个环境都有各自的功能与作用,有时我们可以在程序报错中得知,我们写的代码在哪个环境下出现了错误,便于我们可以快速找出bug。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值