现在的位置: 首页 > 综合 > 正文

C 常用函数集

2013年03月09日 ⁄ 综合 ⁄ 共 2818字 ⁄ 字号 评论关闭

   函数名: feof

  功 能: 检测流上的文件结束符

  用 法: int feof(FILE *stream);

  程序例:

  #include <stdio.h>

  int main(void)

  {

             FILE *stream;

             /* open a file for reading */

             stream = fopen("DUMMY.FIL", "r");

             /* read a character from the file */

             fgetc(stream);

             /* check for EOF */

             if (feof(stream))

               printf("We have reached end-of-file\n");

             /* close the file */

             fclose(stream);

  return 0;

  }

  feof(fp)有两个返回值:如果遇到文件结束,函数feof(fp)的值为1,否则为0。

  EOF是文件结束标志的文件。在文本文件中,数据是以字符的ASCⅡ代码值的形式存放,ASCⅡ代码的范围是0到255,不可能出现-1,因此可以用EOF作为文件结束标志。

  当把数据以二进制形式存放到文件中时,就会有-1值的出现,因此不能采用EOF作为二进制文件的结束标志。为解决这一个问题,ASCI C提供一个feof函数,用来判断文件是否结束。feof函数既可用以判断二进制文件又可用以判断文本文件。

  “C”语言的“feof()”函数和数据库中“eof()”函数的运做是完全不同的。数据库中“eof()”函数读取当前指针的位置,“C”语言的“feof()”函数返回的是最后一次“读操作的内容”。多年来把“位置和内容”相混,从而造成了对这一概念的似是而非。

  那么,位置和内容到底有何不同呢?举个简单的例子,比如有人说“你走到火车的最后一节车箱”这就是位置。而如果说“请你一直向后走,摸到铁轨结果”这就是内容。也就是说用内容来判断会“多走一节”。这就是完全依赖于“while(!feof(FP)){...}”进行文件复制时,目标文档总会比源文档“多出一些”的原因。

  在“C”文件读取操作时不能完全依赖于“while(!feof(FP)){...}”的判断。

 

fseek函数是 用来设定文件的当前读写位置.


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


函数功能:把fp的文件读写位置指针移到指定的位置.


fseek(fp,20,SEEK_SET); 意思是把fp文件读写位置指针从文件开始后移20个字节.


第一个参数fp为文件指针

第二个参数offset为偏移量,整数表示正向偏移,负数表示负向偏移

第三个参数origin设定从文件的哪里开始偏移,可能取值为:SEEK_CUR、 SEEK_END 或 SEEK_SET

SEEK_CUR: 当前位置

SEEK_END: 文件结尾

SEEK_SET: 文件开头

其中SEEK_CUR,SEEK_END和SEEK_SET依次为1,2和0




ftell函数是用来获取文件的当前读写位置;


函数原型: long ftell(FILE *fp)


函数功能:得到流式文件的当前读写位置,其返回值是当前读写位置偏离文件头部的字节数.


ban=ftell(fp); 是获取fp指定的文件的当前读写位置,并将其值传给变量ban.


fseek函数与ftell函数综合应用:

分析:可以用fseek函数把位置指针移到文件尾,再用ftell函数获得这时位置指针距文件头的字节数,这个字节数就是文件的长度.



#include


main()


{


  FILE *fp;

  char filename[80];

  long length; printf("输入文件名:");

  gets(filename);


  //以二进制读文件方式打开文件

  fp=fopen(filename,"rb");

  if(fp==NULL)

  printf("file not found! ");

  else

  {

    //把文件的位置指针移到文件尾

    fseek(fp,OL,SEEK_END);


    //获取文件长度;

    length=ftell(fp);

    printf("该文件的长度为%1d字节 ",length);

    fclose(fp);

  }

}

    int fread(void *ptr, int size, int nitems, FILE *fp)
 参 数:
      用于接收数据的地址(字符型指针)(ptr)
  单个元素的大小(size)
  元素个数(nitems)
  提供数据的文件指针(fp)
  返回值:成功读取的元素个数

   格式:fwrite(buffer,size,count,fp);
  (1)buffer:是一个指针,对fwrite来说,是要输出数据的地址。
  (2)size:要写入的字节数;
  (3)count:要进行写入size字节的数据项的个数;
  (4)fp:目标文件指针。
  说明:写入到文件的哪里? 这个与文件的打开模式有关,如果是r+,则是从file pointer指向的地址开始写,替换掉之后的内容,文件的长度可以不变;如果是a+,则从文件的末尾开始添加,文件长度加大,而且fseek函数对此函数没有作用。

  程序例:
  #include <string.h>
  #include <stdio.h>
  int main(void)
  {
            FILE *fp;
            char msg[] = "this is a test";
            char buf[20];
            if (NULL == (fp = fopen("DUMMY.FIL", "w+")))
      {
               fprintf(stderr, "Cannot open output file./n");
               return 1;
            }   
            fwrite(msg, strlen(msg)+1, 1, fp); /* write some data to the file */
   
            fseek(fp, 0, SEEK_SET); /* seek to the beginning of the file */
  
            fread(buf, strlen(msg)+1, 1,fp); /* read the data and display it */
            printf("%s/n", buf);
 
           fclose(fp);
           return 0;
  }

 

【上篇】
【下篇】

抱歉!评论已关闭.