fseek函数

fseek(fp,0,SEEK_END),请问这么设置是将fp指针移到文件结尾吗?... fseek(fp, 0, SEEK_END),请问这么设置是将fp指针移到文件结尾吗? 展开
 我来答
艳阳高照的午后
2015-05-31 · TA获得超过1万个赞
知道大有可为答主
回答量:1.2万
采纳率:97%
帮助的人:4734万
展开全部
  fseek函数:
  int fseek(FILE *stream, long offset, int fromwhere);函数设置文件指针stream的位置。
  如果执行成功,stream将指向以fromwhere为基准,偏移offset(指针偏移量)个字节的位置,函数返回0。如果执行失败(比如offset超过文件自身大小),则不改变stream指向的位置,函数返回一个非0值。
  实验得出,超出文件末尾位置,还是返回0。往回偏移超出首位置,返回-1,且指向一个-1的位置,请小心使用。
  fseek函数和lseek函数类似,但lseek返回的是一个off_t数值,而fseek返回的是一个整型。
  功能:

  重定位流(数据流/文件)上的文件内部位置指针。
  注意:文件指针指向文件/流。位置指针指向文件内部的字节位置,随着文件的读取会移动,文件指针如果不重新赋值将不会改变指向别的文件。
  程序例:

  #include <stdio.h>
  long filesize(FILE*stream);
  int main(void)
  {
  FILE *stream;
  stream=fopen("MYFILE.TXT","w+");
  fprintf(stream,"Thisisatest");
  printf("FilesizeofMYFILE.TXTis%ldbytes\n",filesize(stream));
  fclose(stream);
  return 0;
  }
  
  long filesize(FILE*stream)
  {
  long curpos,length;
  curpos=ftell(stream);
  fseek(stream,0L,SEEK_END);
  length=ftell(stream);
  fseek(stream,curpos,SEEK_SET);
  return length;
  }
  

  int fseek( FILE *stream, long offset, int origin );
  第一个参数stream为文件指针
  第二个参数offset为偏移量,正数表示正向偏移,负数表示负向偏移
  第三个参数origin设定从文件的哪里开始偏移,可能取值为:SEEK_CUR、 SEEK_END 或 SEEK_SET
  SEEK_SET: 文件开头
  SEEK_CUR: 当前位置
  SEEK_END: 文件结尾
  其中SEEK_SET,SEEK_CUR和SEEK_END依次为0,1和2.
  简言之:
  fseek(fp,100L,0);把文件内部指针移动到离文件开头100字节处;
  fseek(fp,100L,1);把文件内部指针移动到离文件当前位置100字节处;
  fseek(fp,-100L,2);把文件内部指针退回到离文件结尾100字节处。
  使用实例:
  #include<stdio.h>
  #defineN5
  typedefstructstudent{
  longsno;
  charname[10];
  floatscore[3];
  }STU;
  
  voidfun(char*filename,STUn)
  {
  FILE*fp;
  fp=fopen(filename,"rb+");
  fseek(fp,-1L*sizeof(STU),SEEK_END);
  fwrite(&n,sizeof(STU),1,fp);
  fclose(fp);
  }
  
  voidmain()/*修改覆盖最后一个学生数据*/
  {
  STUt[N]={{10001,"MaChao",91,92,77},{10002,"CaoKai",75,60,88},
  {10003,"LiSi",85,70,78},{10004,"FangFang",90,82,87},
  {10005,"ZhangSan",95,80,88}};
  STUn={10006,"ZhaoSi",55,70,68},ss[N];
  inti,j;FILE*fp;
  fp=fopen("student.dat","wb");
  fwrite(t,sizeof(STU),N,fp);
  fclose(fp);
  fp=fopen("student.dat","rb");
  fread(ss,sizeof(STU),N,fp);
  fclose(fp);
  printf("\nTheoriginaldata:\n\n");
  for(j=0;j<N;j++)
  {
  printf("\nNo:%ldName:%-8sScores:",ss[j].sno,ss[j].name);
  for(i=0;i<3;i++)printf("%6.2f",ss[j].score[i]);
  printf("\n");
  }
  fun("student.dat",n);
  printf("\nThedataaftermodifing:\n\n");
  fp=fopen("student.dat","rb");
  fread(ss,sizeof(STU),N,fp);
  fclose(fp);
  for(j=0;j<N;j++)
  {
  printf("\nNo:%ldName:%-8sScores:",ss[j].sno,ss[j].name);
  for(i=0;i<3;i++)printf("%6.2f",ss[j].score[i]);
  printf("\n");
  }
  }
  
01号学生
2015-07-04 · TA获得超过1.9万个赞
知道小有建树答主
回答量:953
采纳率:50%
帮助的人:534万
展开全部
是的
int fseek(FILE *stream, long offset, int fromwhere);函数设置文件指针stream的位置。
如果执行成功,stream将指向以fromwhere为基准,偏移offset(指针偏移量)个字节的位置,函数返回0。如果执行失败(比如offset超过文件自身大小),则不改变stream指向的位置,函数返回一个非0值。
实验得出,超出文件末尾位置,还是返回0。往回偏移超出首位置,返回-1,且指向一个-1的位置,请小心使用。
fseek函数和lseek函数类似,但lseek返回的是一个off_t数值,而fseek返回的是一个整型。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
深远且恬静的小百花
2011-12-06 · TA获得超过376个赞
知道小有建树答主
回答量:404
采纳率:0%
帮助的人:220万
展开全部
feek(文件指针,位移量,起始点)
SEEK-END的数字表示就是2,既文件末尾
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友06371bb00
2011-12-17
知道答主
回答量:64
采纳率:0%
帮助的人:17.2万
展开全部
定位文件尾。注意此时并不是定位到文件的最后一字符,而是在定位文件最后一个字符之后的位置
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友f4634eb
2011-12-18 · 超过13用户采纳过TA的回答
知道答主
回答量:42
采纳率:0%
帮助的人:42.8万
展开全部
首先:fseek函数的功能是,重定位流上的文件指针。
例如,#include"stdio.h"
fseek(文件类型指针fp,位移量,起始点);
函数功能:把与fp有关的文件位置指针放到一个指定位置。
SEEK_SET 代表文件开头
SEEK_CUR 代表文件当前位置
SEEK_END 代表文件末尾
例如:
fseek(fp,50L,0);或fseek(fp,50L,SEEK_SET);
其作用是将位置指针移到离文件头50个字节处。
所以根据你的提问,确实是你所理解的将fp指针移到到文件结尾。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式