C语言_文件操作(下)

文章详细介绍了C语言中实现文件随机读写的关键函数,包括fseek用于定位文件指针,ftell获取文件指针位置,rewind将文件指针重置到开始位置。同时,讨论了feof函数在判断文件结束时的正确用法以及perror和strerror在处理错误信息时的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

8. 文件的随机读写

8.1 fseek

8.2 ftell

8.3 rewind

​9. 文件结束判定

10. perror 


8. 文件的随机读写

假设文件中存放的是abcdef,如下图,通常在读文件时,是先读取首元素地址,也就是文件指针指向a,每读一次文件指针向后++;

本节内容将去实现:如何再读文件时,一开始读到的就不是首元素,而可能是c d e 等等。

8.1 fseek

想要实现文件随机读写的功能;首先打开文件,就需要定位到文件指针

fseek:根据文件指针的位置和偏移量来定位文件指针。

函数原型:int fseek(FILE* stream,long int offset,int origin);

头文件:stdio.h

参数:第一个参数文件指针pf;第二个参数偏移量;第三个参数是起始位置,也可以说是文件指针的当前位置;

对于参数三:C语言给出了3个选择 

1. 当前位置,也就是文件指针目前指向的位置;SEEK_CUR---文件指针的当前位置

2. 以文件的末尾为起始位置进行偏移,所以的偏移量都是负数;SEEK_END---文件的末尾位置

3. 以文件的起始位置为初始点进行偏移,所有的偏移量都是正数;SEEK_SET---文件的起始位置

第三个参数设置为SEEK_END,以结尾位置作为当前位置进行偏移;第二个参数设置为-2; 

8.2 ftell

ftell函数:会返回文件指针相对于起始位置的偏移量;

函数原型:long int ftell(FILE* stream);返回类型长整型long int;

 如果没有通过fseek定位文件指针,那么默认的文件指针指向起始位置;那么文件指针相对于起始位置的偏移量就是0;

 如果首先fgetc(pf)读取一个字符,那么fgetc默认会从文件的起始位置进行读取,fgetc以后,文件指针会指向第一个元素的地址;此时用ftell函数返回文件指针相对于起始位置的偏移量就是1;

8.3 rewind

rewind函数:让文件指针的位置回到起始位置;

函数原型:void rewind(FILE* stream);

9. 文件结束判定

被错误使用的  feof    文件结尾处EOF作为结束标志存放

切记:在文件读取过程中,能用feof函数的返回值直接用来判断文件是否结束,该函数是用来判断当文件读取结束的时候,是读取失败结束,还是遇到文件结尾结束;

1. 文本文件读取是否结束,判断返回值是否为EOF(fgetc),或者NULL(fgets);EOF---end of file(文件结束标志)

2. 二进制文件的读取结束判断,判断fread返回值是否小于实际要读的个数;

EOF的定义,返回值为-1;当我们的文件是空的,此时读取文件,EOF的返回值就是-1;

10. perror 

strerror(errno)函数会把错误信息对应的错误码返回;

perror函数会将函数内设定的参数打印出来;并且默认打印冒号+空格;在 设定内容+冒号+空格 后面会打印错误信息的错误码 ,并且该函数不需要引用头文件;相对于strerror函数,perror函数使用起来更加简单方便。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值