文件-fseek()与ftell()

1.fseek()函数
函数模型:int fseek(FILE *stream, long offset, int fromwhere);
函数功能:在fopen()函数打开的文件中移动到任意字节处。
头文件:<stdio.h>
返回值:int类型 正常处理 fseek()返回值为0,出现错误返回-1(超出范围)
第一个参数 FILE 指针,第二个参数偏移量(offset)(long类型)表示从起始点移动的距离,第三个参数是起点模式。
|

模式偏移量的起始点
SEEK_SET文件开始处
SEEK_CUR当前位置
SEEK_END文件末尾

示例:(fp是文件指针)
fseek(fp,-10L,SEEK_END);//从文件结尾回退10个字节。

2.ftell()函数
函数模型:long ftell(FILE *stream);
函数功能:使用fseek函数后再调用函数ftell()就能非常容易地确定文件的当前位置。
头文件:<stdio.h>
返回值:long类型 返回的是当前的位置 文件的第一个字节到文件的开始处的距离是0 以此类推 。(因为ftell返回long型,根据long型的取值范围-231~231-1(-2147483648~2147483647),故对大于2.1G的文件进行操作时出错。当处理这种大文件时通常用fgetpos()和fsetpos()函数)

#include<stdio.h>
int main()
{
 long  last;
 char c;
 FILE *fl=fopen("test.txt","r");
 fseek(fl,0L,SEEK_END);
 last=ftell(fl);
 c=getc(fl);
 printf("文本一共有%d个字符\n",last);
 printf("seek_end定位到的最后一个字符是%chere\n",c);
return 0;
}
test.txt
!flesruoy eveileB ~elbissopmi si gnihtoN

运行结果:
文本一共有40个字符
seek_end定位到的最后一个字符是here
‘------------------------------------------------------------’
即fseek()函数定位到最后一个字符的后面
而恰好ftell()函数返回的距离满足文件的第一个字节到文件的开始处的距离是0
因此恰好可以得到文件中的准确字符数
补充:(摘自c primer plus 第六版)
MS-DOS编译器通常用Ctrl+Z标记文本文件的结尾,打开这样的文件时,c可以识别到这个字符,但是以二进制模式打开相同的字符,Ctrl+Z被看作文件中的一个字符,而实际的文件结尾符在该字符的后面,可能紧贴Ctrl+Z,或用空字符填充,使得该文件的大小是256得倍数

#include<stdio.h>
int main()
{
 long last;			\\字符数
 char ch;			\\储存字符
 int count=1;			\\从最后回退
 FILE *fl=fopen("test.txt","r");
 fseek(fl,0L,SEEK_END);     \\定位最后位置
 last=ftell(fl);		\\得到字符数
 for(;count<=last;count++)
 {
  fseek(fl,-count,SEEK_END);
  ch=getc(fl);
  printf("%c",ch);
 }
return 0;
}
test.txt
!flesruoy eveileB ~elbissopmi si gnihtoN

运行结果:
Nothing is impossible~ Believe yourself!

由于标准IO的特性,每次调用函数读取文件的一个字符的时候,文件结构中文件位置指示器被设置为指向下一个待读取的字符。
//初学c语言 每天进步一点点~~

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值