精华内容
下载资源
问答
  • 格式化读写函数fscanf和fprintffscanf函数,fprintf函数与前面使用的scanf和...这两个函数的调用格式为: fscanf(文件指针,格式字符串,输入表列); fprintf(文件指针,格式字符串,输出表列); 例如:fscanf(f...

    格式化读写函数fscanf和fprintf

    fscanf函数,fprintf函数与前面使用的scanf和printf 函数的功能相似,都是格式化读写函数。 两者的区别在于 fscanf 函数和fprintf函数的读写对象不是键盘和显示器,而是磁盘文件。这两个函数的调用格式为: fscanf(文件指针,格式字符串,输入表列); fprintf(文件指针,格式字符串,输出表列); 例如:

    fscanf(fp,"%d%s",&i,s);

    fprintf(fp,"%d%c",j,ch);

    用fscanf和fprintf函数也可以完成例10.6的问题。修改后的程序如例10.7所示。

    [例10.7]

    #include

    struct stu

    {

    char name[10];

    int num;

    int age;

    char addr[15];

    }boya[2],boyb[2],*pp,*qq;

    main()

    {

    FILE *fp;

    char ch;

    int i;

    pp=boya;

    qq=boyb;

    if((fp=fopen("stu_list","wb+"))==NULL)

    {

    printf("Cannot open file strike any key exit!");

    getch();

    exit(1);

    }

    printf("\ninput data\n");

    for(i=0;i<2;i++,pp++)

    scanf("%s%d%d%s",pp->name,&pp->num,&pp->age,pp->addr);

    pp=boya;

    for(i=0;i<2;i++,pp++)

    fprintf(fp,"%s %d %d %s\n",pp->name,pp->num,pp->age,pp->

    addr);

    rewind(fp);

    for(i=0;i<2;i++,qq++)

    fscanf(fp,"%s %d %d %s\n",qq->name,&qq->num,&qq->age,qq->addr);

    printf("\n\nname\tnumber age addr\n");

    qq=boyb;

    for(i=0;i<2;i++,qq++)

    printf("%s\t%5d %7d %s\n",qq->name,qq->num, qq->age,

    qq->addr);

    fclose(fp);

    }

    与例10.6相比,本程序中fscanf和fprintf函数每次只能读写一个结构数组元素,因此采用了循环语句来读写全部数组元素。 还要注意指针变量pp,qq由于循环改变了它们的值,因此在程序的25和32行分别对它们重新赋予了数组的首地址。

    文件的随机读写

    前面介绍的对文件的读写方式都是顺序读写, 即读写文件只能从头开始,顺序读写各个数据。 但在实际问题中常要求只读写文件中某一指定的部分。为了解决这个问题可移动文件内部的位置指针到需要读写的位置,再进行读写,这种读写称为随机读写。实现随机读写的关键是要按要求移动位置指针,这称为文件的定位。文件定位移动文件内部位置指针的函数主要有两个, 即 rewind 函数和fseek函数。

    rewind函数前面已多次使用过,其调用形式为: rewind(文件指针); 它的功能是把文件内部的位置指针移到文件首。 下面主要介绍

    fseek函数。

    fseek函数用来移动文件内部位置指针,其调用形式为: fseek(文件指针,位移量,起始点); 其中:“文件指针”指向被移动的文件。 “位移量”表示移动的字节数,要求位移量是long型数据,以便在文件长度大于64KB 时不会出错。当用常量表示位移量时,要求加后缀“L”。“起始点”表示从何处开始计算位移量,规定的起始点有三种:文件首,当前位置和文件尾。

    其表示方法如表10.2。

    起始点    表示符号    数字表示

    ──────────────────────────

    文件首    SEEK—SET    0

    当前位置   SEEK—CUR    1

    文件末尾   SEEK—END     2

    例如:

    fseek(fp,100L,0);其意义是把位置指针移到离文件首100个字节处。还要说明的是fseek函数一般用于二进制文件。在文本文件中由于要进行转换,故往往计算的位置会出现错误。文件的随机读写在移动位置指针之后,即可用前面介绍的任一种读写函数进行读写。由于一般是读写一个数据据块,因此常用fread和fwrite函数。下面用例题来说明文件的随机读写。

    [例10.8]在学生文件stu list中读出第二个学生的数据。

    #include

    struct stu

    {

    char name[10];

    int num;

    int age;

    char addr[15];

    }boy,*qq;

    main()

    {

    FILE *fp;

    char ch;

    int i=1;

    qq=&boy;

    if((fp=fopen("stu_list","rb"))==NULL)

    {

    printf("Cannot open file strike any key exit!");

    getch();

    exit(1);

    }

    rewind(fp);

    fseek(fp,i*sizeof(struct stu),0);

    fread(qq,sizeof(struct stu),1,fp);

    printf("\n\nname\tnumber age addr\n");

    printf("%s\t%5d %7d %s\n",qq->name,qq->num,qq->age,

    qq->addr);

    }

    文件stu_list已由例10.6的程序建立,本程序用随机读出的方法读出第二个学生的数据。程序中定义boy为stu类型变量,qq为指向boy的指针。以读二进制文件方式打开文件,程序第22行移动文件位置指针。其中的i值为1,表示从文件头开始,移动一个stu类型的长度,然后再读出的数据即为第二个学生的数据。

    文件检测函数

    C语言中常用的文件检测函数有以下几个。

    一、文件结束检测函数feof函数调用格式: feof(文件指针);

    功能:判断文件是否处于文件结束位置,如文件结束,则返回值为1,否则为0。

    二、读写文件出错检测函数ferror函数调用格式: ferror(文件指针);

    功能:检查文件在用各种输入输出函数进行读写时是否出错。 如ferror返回值为0表示未出错,否则表示有错。

    三、文件出错标志和文件结束标志置0函数clearerr函数调用格式: clearerr(文件指针);

    功能:本函数用于清除出错标志和文件结束标志,使它们为0值。

    C库文件

    C系统提供了丰富的系统文件,称为库文件,C的库文件分为两类,一类是扩展名为".h"的文件,称为头文件,在前面的包含命令中我们已多次使用过。在".h"文件中包含了常量定义、类型定义、宏定义、函数原型以及各种编译选择设置等信息。另一类是函数库,包括了各种函数的目标代码,供用户在程序中调用。通常在程序中调用一个库函数时,要在调用之前包含该函数原型所在的".h" 文件。

    在附录中给出了全部库函数。

    ALLOC.H    说明内存管理函数(分配、释放等)。

    ASSERT.H    定义 assert调试宏。

    BIOS.H     说明调用IBM—PC ROM BIOS子程序的各个函数。

    CONIO.H    说明调用DOS控制台I/O子程序的各个函数。

    CTYPE.H    包含有关字符分类及转换的名类信息(如 isalpha和toascii等)。

    DIR.H     包含有关目录和路径的结构、宏定义和函数。

    DOS.H     定义和说明MSDOS和8086调用的一些常量和函数。

    ERRON.H    定义错误代码的助记符。

    FCNTL.H    定义在与open库子程序连接时的符号常量。

    FLOAT.H    包含有关浮点运算的一些参数和函数。

    GRAPHICS.H   说明有关图形功能的各个函数,图形错误代码的常量定义,正对不同驱动程序的各种颜色值,及函数用到的一些特殊结构。

    IO.H      包含低级I/O子程序的结构和说明。

    LIMIT.H    包含各环境参数、编译时间限制、数的范围等信息。

    MATH.H     说明数学运算函数,还定了 HUGE VAL 宏, 说明了matherr和matherr子程序用到的特殊结构。

    MEM.H     说明一些内存操作函数(其中大多数也在STRING.H 中说明)。

    PROCESS.H   说明进程管理的各个函数,spawn…和EXEC …函数的结构说明。

    SETJMP.H    定义longjmp和setjmp函数用到的jmp buf类型, 说明这两个函数。

    SHARE.H    定义文件共享函数的参数。

    SIGNAL.H    定义SIG[ZZ(Z] [ZZ)]IGN和SIG[ZZ(Z] [ZZ)]DFL常量,说明rajse和signal两个函数。

    STDARG.H    定义读函数参数表的宏。(如vprintf,vscarf函数)。

    STDDEF.H    定义一些公共数据类型和宏。

    STDIO.H    定义Kernighan和Ritchie在Unix System V 中定义的标准和扩展的类型和宏。还定义标准I/O 预定义流:stdin,stdout和stderr,说明 I/O流子程序。

    STDLIB.H    说明一些常用的子程序:转换子程序、搜索/ 排序子程序等。

    STRING.H    说明一些串操作和内存操作函数。

    SYS\STAT.H   定义在打开和创建文件时用到的一些符号常量。

    SYS\TYPES.H  说明ftime函数和timeb结构。

    SYS\TIME.H   定义时间的类型time[ZZ(Z] [ZZ)]t。

    TIME.H     定义时间转换子程序asctime、localtime和gmtime的结构,ctime、 difftime、 gmtime、 localtime和stime用到的类型,并提供这些函数的原型。

    VALUE.H    定义一些重要常量, 包括依赖于机器硬件的和为与Unix System V相兼容而说明的一些常量,包括浮点和双精度值的范围。

    展开全文
  • C语言文件的定义,如何对文件进行操作,文件指针,如何定义指向文件的指针,通过文件指针对文件进行操作,文件应用举例,二进制文件相关操作,文件定位

    C语言文件的定义,如何对文件进行操作,文件指针,如何定义指向文件的指针,通过文件指针对文件进行操作,文件应用举例,二进制文件相关操作,文件定位

    一、什么是文件

    1、文件的定义:文件是相关信息的集合
    信息:
    文字、文件的扩展名为:txt,doc
    声音、文件的扩展名为:mp3,wav,wma
    图像、文件的扩展名为:bmp,jpg,gif
    视频、文件的扩展名为:AVI、mov、rmvb、rm、FLV、mp4、3GP
    2、文件的取名:
    主文件名.扩展名
    1234563.txt
    3、文件的分类(在C程序当中对文件的分类)
    A:文本文件(存放字符/文字的文件.txt)
    B:二进制文件(.data)把结构体的信息写入的文件被称为二进制文件

    二、C程序对文件的操作

    读操作:从文件里面把文件的内容取出来,并输出到屏幕(不会改变文件的内容)
    写操作:把一些内容往文件里面写入(会改变文件的内容)

    1、C程序对文件的操作

    C程序通过文件的指针并加上一些函数然后对文件进行操作的

    2、什么是文件指针

    文件指针:这个指针是用来存放文件的首地址。这个指针是专门用来指向文件的。

    3、如何来定义文件指针

    格式:

    FILE *指针名;
    

    比如:定义了一个指针为fp,这个指针以后只能指向文件,之后要把文件的首地址赋值给该指针

    FILE *fp;
    

    4、如何给文件指针赋予初值

    如何赋值:一般通过fopen这个函数对指针进行赋值
    fopen功能
    A:打开文件。
    B:同时会返回打开的那个文件的首地址。
    C:该函数实际上就是地址。
    格式

    fopen("要打开的文件名","打开方式");
    

    说明:
    1、打开方式是表明打开文件之后要读还是要写
    2、打开方式:

    r:要打开文件之后要读文件(read) 文本文件
    w:要打开文件之后要写文件(write) 覆盖
    a:要打开文件之后要追加文件(append) 把新的数据加到末尾
    rb:要打开二进制文件进行读
    wb:要打开二进制文件进行写

    如果打开方式中加了一个"b"就表示要对二进制文件进行操作
    在这里插入图片描述
    3、如果打开的文件名的路径当中含义 \ 的时候就要用双杠 \ \ 。

    fopen("c:\\chen\\My.txt","r");//打开My.txt这个文本文件进行读的操作。
    

    在这里插入图片描述
    使用文件指针
    打开文件

    FILE *fp;
    //fopen该函数返回的是文件的地址
    fp=fopen("要打开文件的名称。即包含文件名的路径","打开方式");
    

    关闭文件
    A:通过fopen函数能够打开文件,之后对文件进行操作。
    B:操作完毕之后,一定要关闭文件。
    C:格式:fclose(文件指针名);

    程序操作文件的一般格式:

    FILE *fp;//定义一个文件指针
    fp=fopen("打开文件名","打开方式");//把文件指针具体的去指向一个文件
    //然后对文件进行操作
    fclose(fp);//要关闭文件
    

    4、对文件操作的函数:

    1)fgetc函数
    功能:从fp所指向的文件里面读取出一个字符。 (r)
    格式:字符型变量=fget(fp); //fp是一个文件指针
    文件一定要以读的方式打开,之后指针会自动向后移动一个位置

    2)fputc函数:
    功能:从fp所指向的文件里面写入一个字符。 (w)
    格式:fputc(要写入的字符,fp);
    文件一定要以写的方式打开,之后指针会自动向后移动一个位置

    3)fgets函数:
    功能:从fp所指向的文件里面读取出来一个字符串
    格式:fgets(str,n,fp);它会读出n-1个字符,留一个字符为\0
    str:存放字符串的一个数组,n表示读取出来字符的个数,fp是文件的指针

    4)fputs函数
    功能:把字符串写入到fp和指向的文件当中去
    格式:fputs(str,fp);把str当中所有的字符写入到fp里面去

    5)专门用来对二进制文件进行操作
    A:fwrite函数
    功能:把一个结构体变量当中的信息以二进制的形式写入到指定的文件当中去
    格式:fwrite(&结构体变量名,sizeof(结构体类型),1,fp);
    B:fread函数
    功能:从fp所指向的文件当中读出一条信息,存放在一个结构体变量当中
    格式:fread(&结构体变量名,sizeof(结构体类型),1,fp);

    6) feof函数
    功能:判断指向文件的指针是否指向文件的末尾
    格式:feof(文件指针);返回1则代表指向了文件的末尾,返回0则代表没有指向文件末尾
    feof(fp);
    一般的用法:while(!feof(fp));
    //(!feof(fp))返回0则代表指向了文件的末尾,返回1则代表没有指向文件末尾

    三、对文件进行操作的案例

    1、对文件进行读取操作

    1)从文件当中读取一个字符
    ch=fgetc(fp); //表示从fp指向的文件当中指向一个字符 ,并存放到变量ch里面
    A:新建一个txt文件
    在这里插入图片描述
    B:

    #include<stdio.h> 
    void main(){
    	FILE *fp;
    	char ch; 
    	fp=fopen("c:\\chen\\My.txt","r");//要以读的方式打开一个文本文件,并让指针fp指向这个文件
    	ch=fgetc(fp); //表示从fp指向的文件当中指向一个字符 ,并存放到变量ch里面
    	printf("%c",ch); 
    	//一定要关闭文件
    	fclose(fp);
    }
    

    在这里插入图片描述
    2)如何从一个文件当中把所有的都读取出来
    当文件没有读完时反复的读取文件当中的字符
    A:如何判断一个文件指针是否到了末尾
    feof函数:能够判断指针是否到文件的末尾
    格式:feof(指向文件的指针);

     feof(fp);
    

    该函数返回值为0时没有到末尾
    如果返回值为1表示到了末尾
    一般:
    while(!feof(fp))//当不到末尾

    #include<stdio.h> 
    void main(){
    	FILE *fp;
    	char ch; 
    	//要以读的方式打开一个文本文件,并让指针fp指向这个文件
    	fp=fopen("c:\\chen\\My.txt","r");
    	while(!feof(fp)){//当不到文件末尾时就反复的读取	
    	ch=fgetc(fp); //表示从fp指向的文件当中指向一个字符 ,并存放到变量ch里面
    	printf("%c",ch); 
    	}
    	//一定要关闭文件
    	fclose(fp);
    }
    

    在这里插入图片描述

    2、对文件进行写的操作

    1)向文件当中写入单个字符
    A:创建一个文件
    在这里插入图片描述

    #include<stdio.h> 
    void main(){
    	FILE *fp;
    	char ch;
    	fp=fopen("c:\\chen\\You.txt","w");
    	ch='A';
    	fputc(ch,fp);
    	fclose(fp);
    }
    

    在这里插入图片描述
    2)向文件当中写入多个字符(覆盖)
    用户输入字符,然后将用户输入的字符写入到对应的文件当中

    #include<stdio.h> 
    void main(){
    	FILE *fp;
    	char ch[100];
    	fp=fopen("c:\\chen\\You.txt","w");//覆盖旧的字符
    	printf("请输入一个字符串:");
    	gets(ch); 
    	int i; 
    	for(i=0;ch[i];i++){
    		fputc(ch[i],fp);//将用户输入的文字写入到fp指向的文件当中 
    	}
    	fclose(fp);
    }
    

    在这里插入图片描述
    3)向文件当中写入多个字符(追加)
    在这里插入图片描述

    #include<stdio.h> 
    void main(){
    	FILE *fp;
    	char ch[100];
    	fp=fopen("c:\\chen\\You.txt","a");//a为追加
    	printf("请输入一个字符串:");
    	gets(ch); 
    	int i; 
    	for(i=0;ch[i];i++){
    		fputc(ch[i],fp);//将用户输入的文字写入到fp指向的文件当中 
    	}
    	fclose(fp);
    }
    

    在这里插入图片描述
    在这里插入图片描述
    3)fgets函数:的用法

    #include<stdio.h> 
    void main(){
    	FILE *fp;
    	char str[100];
    	fp=fopen("c:\\chen\\My.txt","r");//以读的方式将文件的地址值赋予指针fp
    	fgets(str,5,fp); //从fp指向的文件当中地区5个字符,放入到str字符数组当中 
    	puts(str);//输出字符数组 
    	fclose(fp);
    }
    

    fgets(str,f,np);它会读出n个字符,留一个字符为\0,所以器实际字符串的长度为n-1,读取出来的字符串为n-1个
    在这里插入图片描述
    4)fputs函数:的用法

    #include<stdio.h> 
    void main(){
    	FILE *fp;
    	char str[100]={"abcd1235"};
    	fp=fopen("c:\\chen\\My.txt","w");//以写的方式将文件的地址值赋予指针fp
    	fputs(str,fp);
    	fclose(fp);
    }
    

    在这里插入图片描述
    5)专门用来对二进制文件进行操作
    A:fwrite函数:的用法
    功能:把一个结构体变量当中的信息以二进制的形式写入到指定的文件当中去
    格式:fwrite(&结构体变量名,sizeof(结构体类型),1,fp);

    向文件当中输入单个结构体变量

    #include<stdio.h> 
    typedef struct worker{
    	char Id[10];
    	char Name[10];
    	int Age;
    }WOR;//结构体类型为WOR 
    void main(){
    	FILE *fp;
    	WOR w[5]={
    		{"w1","张三",34},
    		{"w2","李四",54},
    		{"w3","二狗",64},
    		{"w4","狗娃",74},
    		{"w5","小样",84}
    	};
    	fp=fopen("c:\\chen\\worker.data","wb");//以写入的方式打开一个二进制文件用fp指向该文件的首地址值 
    	fwrite(&w[0],sizeof(WOR),1,fp);//通过fwrite函数对文件进行写入 
    	fclose(fp);//关闭文件 
    }
    

    运行以后
    在这里插入图片描述
    在这里插入图片描述
    向文件当中输入多个结构体变量

    #include<stdio.h> 
    typedef struct worker{
    	char Id[10];
    	char Name[10];
    	int Age;
    }WOR;//结构体类型为WOR 
    void main(){
    	FILE *fp;
    	WOR w[5]={
    		{"w1","张三",34},
    		{"w2","李四",54},
    		{"w3","二狗",64},
    		{"w4","狗娃",74},
    		{"w5","小样",84}
    	};
    	int i; 
    	fp=fopen("c:\\chen\\worker.data","wb");//以写入的方式打开一个二进制文件用fp指向该文件的首地址值 
    	for(i=0;i<5;i++){
    		fwrite(&w[i],sizeof(WOR),1,fp);//通过fwrite函数对文件进行写入
    	}
    	fclose(fp);//关闭文件 
    }
    

    文件里面的样子
    在这里插入图片描述
    B:fread函数
    功能:从fp所指向的文件当中读出一条信息,存放在一个结构体变量当中
    格式:fread(&结构体变量名,sizeof(结构体类型),1,fp);
    从二进制文件当中读取单行内容

    #include<stdio.h> 
    typedef struct worker{
    	char Id[10];
    	char Name[10];
    	int Age;
    }WOR;//结构体类型为WOR 
    void main(){
    	WOR w; 
    	FILE *fp;
    	//打开一个二进制文件进行读
    	fp=fopen("c:\\chen\\worker.data","rb");
    	//将fp指向的二进制文件读取到的内容放入到结构w当中
    	fread(&w,sizeof(WOR),1,fp); 
    	printf("%s\t%s\t%d",w.Id,w.Name,w.Age);
    	fclose(fp);	 
    }
    

    在这里插入图片描述
    从二进制文件当中读取多行内容

    #include<stdio.h> 
    typedef struct worker{
    	char Id[10];
    	char Name[10];
    	int Age;
    }WOR;//结构体类型为WOR 
    void main(){
    	WOR w; 
    	FILE *fp;
    	fp=fopen("c:\\chen\\worker.data","rb");//打开一个二进制文件进行读
    	while(!feof(fp)){//判断文件的指针是否到达文件的末尾 
    		fread(&w,sizeof(WOR),1,fp);//将fp指向的二进制文件读取到的内容放入到结构w当中 
    		printf("%s\t%s\t%d\n",w.Id,w.Name,w.Age);
    	}
    	fclose(fp);	 
    }
    

    在这里插入图片描述

    四、文件定位

    1、文件指针的定位

    2、当文件刚刚打开的时候,文件指针会自动的指向文件的开头

    3、随着我们调用读写函数文件指针也会自动的向后移动

    在这里插入图片描述

    4、有时候为了编程需要,我们可能要通过程序手动的去移动文件指针

    5、文件定位函数:

    A:fseek函数
    功能:用来移动文件指针到文件的某一个位置
    格式:fseek(fp,移动的距离【位移量】,参考点【起始点】);

    参考点
    SEEK_SET:从文件的开始的位置
    SEEK_END:从文件的末尾
    SEEK_CUR:文件的当前位置

    位移量
    正数表示向文件的末尾移动
    为负数表示向文件的开头方向移动

    案例一、

    证明每次调用fgetc指针都会自动向后移动一位
    在这里插入图片描述

    #include<stdio.h> 
    #include<string.h>
    void main(){
    	FILE *fp;
    	char ch,ch1; 
    	//以读的方式打开文件,并将文件指针fp指向文件的开头
    	fp=fopen("c:\\chen\\My.txt","r"); 
    	ch=fgetc(fp);//表示从文件里面读取一个字符
    	ch1=fgetc(fp);//表示从文件里面读取一个字符
    	printf("%c,%c",ch,ch1); 
    	fclose(fp);
    }
    

    在这里插入图片描述

    案例二、

    SEEK_SET:从文件的开始的位置

    #include<stdio.h> 
    #include<string.h>
    void main(){
    	FILE *fp;
    	char ch; 
    	//以读的方式打开文件,并将文件指针fp指向文件的开头
    	fp=fopen("c:\\chen\\My.txt","r"); 
    	fseek(fp,2,SEEK_SET);
    	ch=fgetc(fp);//表示从文件里面读取一个字符
    	printf("%c",ch); 
    	fclose(fp);
    }
    

    fseek(fp,2,SEEK_SET);//表示以开始的位置(SEEK_SET)将指向文件的指针(fp)向后移动动两个位置

    在这里插入图片描述
    在这里插入图片描述
    改进上方算法练习
    SEEK_CUR:文件的当前位置

    #include<stdio.h> 
    #include<string.h>
    void main(){
    	FILE *fp;
    	char ch; 
    	//以读的方式打开文件,并将文件指针fp指向文件的开头
    	fp=fopen("c:\\chen\\My.txt","r"); 
    	fseek(fp,2,SEEK_SET);//表示以文件当前的位置开始为参考点向尾部移动2个单位  
    	ch=fgetc(fp);//表示从文件里面读取一个字符
    	printf("%c",ch); 
    	fseek(fp,1,SEEK_CUR);//以当前的位置为参考点,向后移动一个单位 
    	ch=fgetc(fp);//表示从文件里面读取一个字符
    	printf("%c",ch); 
    	fclose(fp);
    }
    

    在这里插入图片描述
    在这里插入图片描述
    改进上述算法
    SEEK_END:从文件的末尾

    #include<stdio.h> 
    #include<string.h>
    void main(){
    	FILE *fp;
    	char ch; 
    	//以读的方式打开文件,并将文件指针fp指向文件的开头
    	fp=fopen("c:\\chen\\My.txt","r"); 
    	fseek(fp,-2,SEEK_END);//表示以文件末尾的位置开始为参考点向头部移动2个单位  
    	ch=fgetc(fp);//表示从文件里面读取一个字符
    	printf("%c",ch); 
    	fclose(fp);
    }
    

    在这里插入图片描述
    在这里插入图片描述

    四、rewind函数:

    功能:把文件指针移动带开头
    格式:rewind(指向文件的指针);
    rewind(fp);相当于fseek(fp,0,SEEK_SET);//以文件开头文基准向后移一个单位

    #include<stdio.h> 
    #include<string.h>
    void main(){
    	FILE *fp;
    	char ch; 
    	//以读的方式打开文件,并将文件指针fp指向文件的开头
    	fp=fopen("c:\\chen\\My.txt","r"); 
    	ch=fgetc(fp);//表示从文件里面读取一个字符,并且指针会自动指向下一个位置 
    	printf("%c",ch); 
    	rewind(fp);会把指针移动到开头 
    	ch=fgetc(fp);//表示从文件里面读取一个字符,并且指针会自动指向下一个位置 
    	printf("%c",ch); 
    	rewind(fp);//要把指针移动到开头 
    	fclose(fp);
    }
    

    在这里插入图片描述

    #include<stdio.h> 
    #include<string.h>
    void main(){
    	FILE *fp;
    	char ch; 
    	//以读的方式打开文件,并将文件指针fp指向文件的开头
    	fp=fopen("c:\\chen\\My.txt","r"); 
    	ch=fgetc(fp);//表示从文件里面读取一个字符,并且指针会自动指向下一个位置 
    	printf("%c",ch); 
    	
    	
    	//rewind(fp);//会把指针移动到开头 
    	fseek(fp,0,SEEK_SET);//会把指针移动到开头 
    	
    	
    	ch=fgetc(fp);//表示从文件里面读取一个字符,并且指针会自动指向下一个位置 
    	printf("%c",ch); 
    	rewind(fp);//要把指针移动到开头 
    	fclose(fp);
    }
    

    在这里插入图片描述

    展开全文
  • 转自:http://hi.baidu.com/wengjiang000/item/867ead5da7d95c10abf6d736通常文件打开后,读写位置按先后顺序.但有时你想变动读写位置,例如重新从...fseek 用于二进制方式打开的文件,移动文件读写指针位置.fseek(in,...

    转自:http://hi.baidu.com/wengjiang000/item/867ead5da7d95c10abf6d736

    通常文件打开后,读写位置按先后顺序.但有时你想变动读写位置,例如重新从某处起,再读一次.

    int fseek(FILE *stream, long offset, int fromwhere);fseek 用于二进制方式打开的文件,移动文件读写指针位置.

    fseek(in,-1L,1);   -- 文件流in, 零点为当前指针位置,SEEK_CUR 就是 1,  -1L -- 文件指针回退1个字节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字节处。

    rewind

    功 能: 将文件指针重新指向一个流的开头 用 法: int rewind(FILE *stream);

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

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

    fread

    功 能: 从一个流中读数据

    函数原型: size_tfread(void*buffer,size_tsize,size_tcount,FILE*stream);

    参 数:

    1.用于接收数据的地址(指针)(buffer)

    2.单个元素的大小(size) :单位是字节而不是位,例如读取一个整型数就是2个字节

    3.元素个数(count)

    4.提供数据的文件指针(stream)

    返回值:成功读取的元素个数 程序例  #include

    int main(void)

    {

    FILE *stream;

    char msg[] = "this is a test";

    char buf[20];

    if ((stream = fopen("DUMMY.FIL", "w+"))

    == NULL)

    {

    fprintf(stderr,

    "Cannot open output file.\n");

    return 1;

    }

    /* write some data to the file */

    fwrite(msg, strlen(msg)+1, 1, stream);

    /* seek to the beginning of the file */

    fseek(stream, 0, SEEK_SET);

    /* read the data and display it */

    fread(buf, strlen(msg)+1, 1,stream);

    printf("%s\n", buf);

    fclose(stream);

    return 0;

    }

    展开全文
  • 刚学习C语言的朋友,对指针移动”可能不太理解。举个例子,例如下述代码:int a = 1;那么大家都知道a + 1肯定就是2了。如果是指针呢?例如:int *p = 1;p + 1还是2吗?为了说明问题,请看以下代码:#include ...

    版权声明:本文为作者原创文章,转载时请注明文章来源,否则视为侵权,并按法律程序处理!

    刚学习C语言的朋友,对指针“移动”可能不太理解。举个例子,例如下述代码:

    int a = 1;

    那么大家都知道a + 1肯定就是2了。如果是指针呢?例如:

    int *p = 1;

    p + 1还是2吗?

    为了说明问题,请看以下代码:

    #include "stdio.h"

    #include "stdlib.h"

    int main()

    {

    int index = 0;

    int number[3] = {1, 2, 3}; //定义一个整型数组

    int *p = &number[0]; //指针p的初始值是数组第一个元素的地址

    printf("p的值是 %x\n", p); //输出p的值,也就是数组第一个元素的地址

    printf("本机int类型占用 %d 个字节\n", sizeof(int)); //得知本机上int类型占用多少字节

    for(index = 0; index < 3; index++)

    {

    printf("第 %d 个元素的地址是 %x\n", index + 1, &number[index]);

    }//输出数组中每一个元素的地址

    for(index = 0; index < 3; index++)

    {

    printf("p加 %d 的值是 %x\n", index, p + index);

    }//输出指针p+1, p+2, p+3的值

    return 0;

    }

    程序很简单,目的就是为了说明指针p自己加上1、2、3分别得到什么值。运行结果如下:

    image.png

    指针p的初始值就是数组第一个元素的地址,为“12ff70”。那么从p + 1开始,并不是简单的12ff70 + 1 = 12ff71,而是12ff70 + 4 = 12ff74。p + 2也不是12ff70 + 2 = 12ff72,而是12ff70 + 4 + 4 =12ff78。所以指针的增加运算与本文开头的整型变量a的增加运算还不一样,这也是许多初学者经常会糊涂的一个地方。

    指针p +n其实计算的是p加上n*类型占用字节数。本文指针p是int类型,本机中,使用sizeof计算出的int占用的字节数是4。因此,p + 1其实就是p + 1 * 4个字节,p + 2其实就是p + 2 * 4个字节。关于每种类型在本机上占用的字节数网上有很多介绍,读者可以自行搜索下。

    可能也有的朋友说,这个我懂啊,p + 1其实就是往前移动了4个字节啊!但是太自大也不好,太自大的结果就是你心里知道p + 1是跨越了4个字节的地址,但是手一抖,写成了p + 4,你说这是笔误呢还是笔误呢?

    展开全文
  • 从点阵字库txt取字,指向文件内容位置的文件指针是唯一的,无法多个副本分别定位(无法一个文件使用多个指针),这与传统上内存中的指针不同。
  • C语言FILE指针的使用方法

    千次阅读 多人点赞 2018-12-14 19:52:52
    C语言FILE指针的使用方法 ...文件指针移动函数3.正文文件读/写函数三、编程实现万年历1.要求: 一、FILE指针 1.定义 1.FILE类型是系统预先设定的一种结构体指针struct _iobuf 2.FILE* 指针作为文件句柄,是文件...
  • 文件指针是指向一个文件的指针,确切的将是指向用文件这个结构体所定义的对象的起始地址,文件指针移动是指在文件之间来移动, 比如: FILE * fp; fp = fopen("/programe/test.txt","a+"); fp就表示...
  • C语言文件指针

    千次阅读 2018-11-09 14:42:50
    // //SEEK_CUR 文件指针的当前位置。 // //SEEK_END 文件结尾。 // //SEEK_SET 文件开头 // fseek(fr,3,SEEK_SET);//负号向前移动,正的向后移动 // while(fread(&ch,sizeof(char),1,fr)>0) // { // putchar(ch);//...
  • 文件指针是指向一个文件的指针,确切的将是指向用文件这个结构体所定义的对象的起始地址,文件指针移动是指在文件之间来移动, 比如: FILE * fp; fp = fopen("/programe/test.txt","a+"); fp就表示...
  • C语言指针学习

    千次阅读 2016-10-08 13:57:31
    指针C语言中广泛使用的一种数据类型。 运用指针编程是C语言最主要的风格之一。利用指针变量可以表示各种数据结构; 能很方便地使用数组和字符串; 并能象汇编语言一样处理内存地址,从而编出精练而高效的程序...
  • 【C/C++】C语言指针总结

    万次阅读 多人点赞 2019-08-28 15:46:13
    文章目录基础部分关于内存物理存储器和存储地址空间关于内存地址指针指针变量指针变量的定义和使用通过指针间接修改变量的值指针大小野指针和空指针万能指针voidconst修饰的指针变量指针和数组数组名指针操作数组...
  • 1.“文件”的由来 一个程序的I/O指代了程序与外界的交互,包括文件、管道、网络、命令行、信号等。更广义地讲,I/O指代任何操作系统理解为“文件”的事务。许多操作系统,包括Linux和Windows,都将各种具有输入和...
  • C语言使用FILE指针文件操作

    千次阅读 多人点赞 2018-08-25 20:59:30
    C语言使用FILE指针文件操作 文件的基本概念 所谓“文件”是指一组相关数据的有序集合。这个数据集有一个名称,叫做文件名。实际上我们已经多次使用了文件,例如源程序文件、目标文件、可执行文件、库文件(头文件...
  • c语言-指针数组

    千次阅读 2018-11-10 22:53:05
    指针 内存和地址怎么理解呢? 机器中有一些位置,每一个位置被称为【字节】/byte,许多现代机器上,每个字节包含8个位。更大内存单位【字】,通常包含2个或4个字节组成。 一个字包含4个字节,它的地址是什么? 他...
  • 一、打开关闭文件 只打开文件 再关闭文件 #include #include main() { FILE *fp; fp = fopen("data.dat","r"); //打开文件 if(fp == NULL) { printf("Cannot open this file!\n "); exit(0); ...
  • C语言指针访问数组元素

    千次阅读 2019-06-14 11:05:11
    指针与数组的关系 一个变量有地址,一个数组包含若干个元素,每个元素在内存中都有地址。 int a[10];...通过指针计算,不是把指针当做一个整数,计算结果,而是指针在内存当中移动 p + 1代表&a[...
  • 特点:以往的数组中,一个数组名只能确定一段内存空间,对这段固定内存内的变量的读写修改操作,但是数组指针在一个数组内可以指向若干字符串,这样,可以根据需要用一个指针数组名调用不同字...
  • C语言文件位置指针

    千次阅读 2017-08-05 22:46:40
    文件位置指针
  • 文件打开后,就可以将“文件指针”作为函数的参数对文件进行读写操作。1.以字符形式读写文件1) 字符读取函数 fgetc( )fgetc(文件指针); //从“文件指针”所指向的文件中读取一个字符该函数返回值为读取到的字符。每...
  • C语言文件操作

    2020-05-24 20:54:37
    由于结构指针的参数传递效率更高,因此C语言文件操作统一以文件指针方式实现。 定义文件类型指针的格式为:**FILE \*fp;** 其中FILE是文件类型定义符,fp是文件类型的指针变量。文件指针是特殊指针,指向的是文件...
  • c语言指针详解

    千次阅读 2018-09-18 20:56:47
    c语言指针详解 指针C语言中广泛使用的一种数据类型。 运用指针编程是C语言最主要的风格之一。利用指针变量可以表示各种数据结构; 能很方便地使用数组和字符串; 并能象汇编语言一样处理内存地址,从而编出精练...
  • C语言指针动态内存的申请和释放

    千次阅读 2020-08-20 21:10:28
    什么是动态内存的申请和释放?...C语言指针的申请: (1).在C语言中使用malloc函数申请内存,函数原形:void* malloc(size_t size); 参数size代表申请的内存的字节数,参数size_t代表指针的...
  • C语言文件加密

    2018-05-07 12:27:05
    C语言进行的文件加密,加密方式为:输入密钥串(不超过32个字符),去除重复字符后,和ASCII码表中第32到126个字符中的剩余字符一同构成循环链表,之后去除链表第一项,从其下一项开始,指针移动i次(i为第一项的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 35,513
精华内容 14,205
关键字:

c语言文件指针移动

c语言 订阅