每天进步一点点-->函数fseek() 使用方法

在阅读代码时,遇到了非常早之前用过的fseek(),非常久没实用了,有点陌生,写出来以便下次查阅。

函数功能是把文件指针指向文件的开头,须要包括头文件stdio.h

fseek

函数名: fseek

功 能: 重定位流上的文件指针

用 法: int fseek(FILE *stream, long offset, int fromwhere);

描 述: 函数设置文件指针stream的位置。假设运行成功,stream将指向以fromwhere为基准,偏移offset个字     节的位置。假设运行失败(比方offset超过文件自身大小),则不改变stream指向的位置。

返回值: 成功,返回0,否则返回其它值。

fseek position the file position pointer for the file referenced by stream to the byte location calculated by offset.

程序例:

#include <stdio.h>
  long filesize(FILE *stream);
  int main(void)
  {
    FILE *stream;
    stream = fopen("MYFILE.TXT", "w+");
    fprintf(stream, "This is a test");
    printf("Filesize of MYFILE.TXT is %ld bytes\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);把fp指针移动到离文件开头100字节处;

fseek(fp,100L,1);把fp指针移动到离文件当前位置100字节处;

fseek(fp,100L,2);把fp指针退回到离文件结尾100字节处。

使用实例:

  #include <stdio.h>
  #define N 5
  typedef struct student {
   long sno;
   char name[10];
   float score[3];
  } STU;
  void fun(char *filename, STU n)
  {
   FILE *fp;
   fp = fopen(filename, "rb+");
   fseek(fp, -1L*sizeof(STU),SEEK_END);
  fwrite(&n, sizeof(STU), 1, fp);
  fclose(fp);
  }
  void main()
  {
    STU t[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}};
    STU n={10006,"ZhaoSi", 55, 70, 68}, ss[N];
    int i,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("\nThe original data :\n\n");
    for (j=0; j<N; j++)
    {
     printf("\nNo: %ld Name: %-8s Scores: ",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("\nThe data after modifing :\n\n");
    fp = fopen("student.dat", "rb");
    fread(ss, sizeof(STU), N, fp);
    fclose(fp);
    for (j=0; j<N; j++)
    {
     printf("\nNo: %ld Name: %-8s Scores: ",ss[j].sno, ss[j].name);
     for (i=0; i<3; i++) 
     printf("%6.2f ", ss[j].score[i]);
     printf("\n");
    }
  }
时间: 2024-11-10 15:41:34

每天进步一点点--&gt;函数fseek() 使用方法的相关文章

用户选择,调用相应函数的编写方法

用户选择,调用相应函数的编写方法: 1.先输出Menu菜单,让用户选择. 2.创建一个Menu字典k=序号,v=操作函数 3.调用用户选择的相应序号的函数:menu[option](参数) def account_info(acc_data): print(user_data) def repay(acc_data): pass def withdraw(acc_data): pass def transfer(acc_data): pass def pay_check(acc_data): p

translate()函数的使用方法

以下实例展示了 translate()函数的使用方法: #!/usr/bin/pythonfrom string import maketrans # 引用 maketrans 函数. intab = "aeiou" outtab = "12345" trantab = maketrans(intab, outtab) str = "this is string example....wow!!!";print str.translate(tra

strdup函数的使用方法

函数名: strdup 功  能: 将串复制到新建的位置处 用  法: char *strdup(char *str): 这个函数在linux的man手冊里解释为: The strdup() function returns a pointer toa new string which is a duplicate of the string s. Memory for thenew string is obtained with malloc(3), and can be freed with

【图文】Excel中vlookup函数的使用方法

今天统计数据,用到了Excel中vlookup函数,第一次使用当然少不了百度,经过反复研究后,算是解决了问题,现整理成文档. 一.实现效果 Sheet1 Sheet2   注:上图中sheet1商品条码列(即D列)引用sheet2中商品条码(即B列)中的数据 二.vlookup函数调用说明 以sheet1中调用函数为例,如下: =VLOOKUP(A2,Sheet2!$A$2:$B$100,2,TRUE) 函数中共有四个调用参数 1)  第一个参数:A2 :可任意指定,也可以是B2.C2等.这一列

inline函数的使用方法

 inline关键字用来定义一个类的内联函数,引入它的主要原因是用它替代C中表达式形式的宏定义. 表达式形式的宏定义如下: #define ExpressionName(Var1,Var2) ((Var1)+(Var2))*((Var1)-(Var2)) 为什么要取代这种形式呢,且听我道来: 1. 首先谈一下在C中使用这种形式宏定义的原因,C语言是一个效率很高的语言,这种宏定义在形式及使用上像一个函数,但它使用预处理器实现,没有了参数压栈,代码生成等一系列的操作,因此,效率很高,这是它在C中

JAVA 主函数(主方法)

主函数(主方法) 1.public     (访问修饰符,公共的)代表该类或者该方法访问权限是最大的 2.static    代表主函数随着类的加载而加载 3.void    代表主函数没有具体的返回值 4.main    main不是java中的关键字,它是一个特殊的单词,它能够被JVM(java虚拟机)所识别 5.String[] args    函数的参数类型是一个字符串数组,该数组的元素是字符串,这个数组传入值的方法是在运行的时候传入,例如:javac Index.java 编译java

多返回值函数的编写方法

方法一:利用全局变量 注意,该方法虽然可以实现有多个返回值的函数,但是由于全局变量不能保证值的正确性(因为其作用域是全局,所以程序范围内都可以修改它的值,如果出现错误将非常难以发现),并且全局变量增加了程序间模块的耦合,所以该方法要慎用. 方法二:使用数组指针 注意,该方法适用于多个返回值的数据类型一致的情况. 方法三:使用结构体指针 注意,当函数要求返回的多个值是相互关联的,或者返回的多个值数据类型不一致时可以采用该方法. 详细内容请参考:http://blog.csdn.net/suprem

内容页直接输出图集函数及使用方法

当你想在内容页一张一张地显示图片的时候,你应该打开数据表看一下图片的存放规则哦,你也许看到了,每张图片以换行的方式保存,每行又以大图,小图,图片说明的方式存放这时我们要显示出每张图片,就是要先按行截取,然后再找到每行的分隔符,当然这里是::::::通过分析我们发现帝国有一个接口文件e/class/userfun.php因此我们在这个文件里写下函数: function showpiclist($str){ $imgr=explode("\r\n",$str); $piclist=&quo

HP数组转JSON函数json_encode和JSON转数组json_decode函数的使用方法

这两个函数比较简单,我这里直接写例子,但是有一点一定要注意,json数据只支持utf-8格式,GBK格式的数据转换为json会报错! json_encode()用法: <?php$data =array(‘name’=>’jianqingwang’,‘sex’=>’man’,‘title’=>’PHPER’,‘location’=>’XiaMen’); $new_data =json_encode($data); var_dump($data);echo “<br>