精华内容
下载资源
问答
  • 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);
    }
    

    在这里插入图片描述

    展开全文
  • C语言文件指针与文件描述符之间可以相互转换: 这要通过fdopen和fileno两个函数实现。它们都包含在头文件stdio.h中。 fdopen的原型: FILE * fdopen(int filedes, const char *opentype); 第一...

    C语言文件指针与文件描述符之间可以相互转换:


    这要通过fdopen和fileno两个函数实现。它们都包含在头文件stdio.h中。


    fdopen的原型: FILE * fdopen(int filedes, const char *opentype);

    第一个参数filedes是一个打开的文件描述符,opentype是表示打开方式的字符串,和fopen函数具有相同的取值,比如"w"或"w+"等。但是你必须保证该字符串的描述和文件实际的打开方式是匹配的。函数fopen()就是返回打开文件的指针;如果操作失败,返回空指针null。


    把文件流指针转换成文件描述符用fileno函数,其原型为:

    int fileno(FILE *stream);

    它返回和stream文件流对应的文件描述符。如果失败,返回-1。

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

    一、导言

    C语言中文件读写也是相当重要的一块,在进行二进制文件逐字节读写时,使用C语言会异常好用。文件指针也是个让人抓脑袋的东西,移动文件指针的函数利用好可以有大作用。

    二、操作

    1. 文件
      文件结构体定义在 stdio.h 头文件中,使用fopen打开文件后会存储一些相关数据在结构体中。
    typedef struct
    {
       short level;
       unsigned flags;
       char fd;
       unsigned char hold;
       short bsize;
       unsigned char *buffer;
       unsigned ar *curp;
       unsigned istemp;
       short token;
    }FILE;
    
    1. 文件指针操作
      文件指针操作主要有以下几个函数,在进行地址偏移计算时用得到。
      void rewind(FILE *stream); - 设置文件位置为给定流 stream 的文件的开头。
      long int ftell(FILE *stream); - 返回给定流 stream 的当前文件位置。
      int fseek(FILE *stream, long int offset, int whence); - 设置流 stream 的文件位置为给定的偏移 offset,参数 offset 意味着从给定的 whence 位置查找的字节数。

    三、实战

    目标:从点阵字库LiShu56.txt文件中提取某一个汉字。
    实现思路:通过汉字的gb2312机内码直接定位到文件中的该汉字起始位置,然后进行循环读写复制。
    字库文件格式截图示例
    上图即该文件中的格式,为图方便,我直接使用二进制文件查看器,定义了几个基本的偏移量。

    #define OFFSET_BASE 98      // 文件首基准位置
    #define OFFSET_WORD 3666    // 这是点阵字库中每个字的整体字节量
    #define OFFSET_INNER 13     // 这是单个字内部起始到实际字的数据的位置的偏移量
    

    因为该字库文件中收录的字并不是直接从 a1a1 连续到 f7fe 的,所以不能够直接求偏移量然后直接偏移,否则使用 fseek 偏移超过文件指针允许的范围,程序将会陷入卡死(或死循环)的状态。
     
    以下为算法流程图:
    偏移算法流程图
    注释:

    1. OFFSET_BASE 是从文件首到能够读取第一个(CurCode后)gb2312码的位置的偏移量。
    2. OFFSET_WORD 是读完这一gb2312码后到下一个字能够读取gb2312码的位置的偏移量。
    3. OFFSET_INNER 是找到该字后,从读完这一gb2312码的位置到能够读取点阵文本的首位置的偏移量。

    实现代码:
    该文件基于Windows系统,在Windows系统中中文占用为两个字节(char),在Linux系统中为三个字节。

    // 给单个字定位到指定位置
    FILE* locateChar(char* text, FILE* src)
    {
    	FILE* file = src;
    	fseek(file, OFFSET_BASE, SEEK_SET);		// 设置起始位置
    	char reader[5];
    	char gbk[5];
    	getGBK(gbk, text);		// 将汉字 text 的gbk码转为文本存储在gbk字符数组中
    	reader[4] = 0;
    	size_t size = sizeof(char);
    	for (int i = 0; i < 8178; i++)		// 该字库收录了8178个简体汉字
    	{
    		fread(reader, size, 4, file);
    		if (strcmp(reader, gbk) == 0)
    		{
    			printf("Found char %s\n", reader);
    			fseek(file, OFFSET_INNER, SEEK_CUR);
    			break;
    		}
    		else
    		{
    			fseek(file, OFFSET_WORD, SEEK_CUR);
    		}
    	}
    	return file;
    }
    

    定位到汉字所在位置后就可以进行读取复制操作了。

    	FILE* file = fopen("bitmap.txt", "wb+");
    	FILE* src = fopen("LiShu56.txt", "rb");
    	src = locateChar(word, src);	// 定位汉字
    	int tick = 56 * 56, flag;		// 该字库点阵尺寸为 56×56,flag用于标记跳出循环
    	size_t size = sizeof(char);
    	char reader;
    	while (tick)
    	{
    		flag = 0;
    		while (fread(&reader, size, 1, src))
    		{
    			switch (reader)
    			{
    			case '_': case 'X':
    				fwrite(&reader, size, 1, file);
    				tick--;
    				break;
    			case '\r':
    				fwrite(&reader, size, 1, file);
    				break;
    			case '\n':
    				fwrite(&reader, size, 1, file);
    				flag = 1;
    				break;
    			default: break;
    			}
    			if (flag) break;
    		}
    	}
    	fclose(src);
    	fclose(file);
    

    生成输出汉字“洋”示例:
    命令窗口输出

    Found char d1f3

    文件输出
    输出文本
     
    如果要将多个字合成在一个文件中,只需要稍作改动。
    不过注意,将 FILE* 赋值给多个变量分别进行 fseek 定位,然后两个指针这里读几个字符,那里读几个字符,最后你会发现每个文件指针指向的都是最后一次调用 fseek 定位的那个字,导致最后是好几个一样的字合在一起。比如我要合成“洋伊”,最后得到的是:

    Found char d1f3
    Found char d2c1
    出错示例

    抽象点说,简而言之,就是指向文件内容位置的文件指针是唯一的。
     
    如果要将多个字合成在一个文本中,可以采用以下思路:
    先将要合成的字,每个字存在一个临时文件中,再依次打开这些文件,读取并复制到(合成)同一文件中。
     

    四、附录

    示例代码中引用的部分函数代码

    // 获得十六进制对应字符
    char getX(int value)
    {
    	if (value < 10) return '0' + value;
    	else return 'a' + (value - 10);
    }
    
    // 直接获得文本GBK十六进制机内码
    void getGBK(char* dest, char* text)
    {
    	int value = (int)((unsigned char)text[0] * 256) + (int)(unsigned char)text[1];
    	int index = 3;
    	while (value)
    	{
    		dest[index--] = getX(value % 16);
    		value /= 16;
    	}
    	dest[4] = 0;
    }
    
    展开全文
  • 记录一下:文件指针向文件描述符转换的时候用fileno函数没问题,然而文件描述符向文件指针转换的时候却出现问题,大于2以上的值就出错。fdopen。 结果采用iob_func()函数却可以,暂时记录一下,后面有时间再探讨其中...

           记录一下:文件指针向文件描述符转换的时候用fileno()函数没问题,然而文件描述符向文件指针转换的时候却出现问题,大于2以上的值就出错 用fdopen()函数。

    结果采用iob_func()函数却可以,暂时记录一下,后面有时间再探讨其中的原因。

    	char* s = "hello k7k!";
    	FILE* fp1 = fopen("x.txt", "w+");
    	fprintf(fp1, "%s\n", s);
    	int fd1 = fileno(fp1);
    	printf("t1 fd:%d \n", fd1);
    	
    	FILE* fp2 = (&__iob_func()[fd1]);
    	fprintf(fp2, "%s\n", s);
    	int fd2 = fileno(fp2);
    	printf("t2 fd:%d \n", fd2);
    这样没问题。iob_func()函数原理到底是咋样的.

    展开全文
  • 一、打开关闭文件 只打开文件 再关闭文件 #include #include main() { FILE *fp; fp = fopen("data.dat","r"); //打开文件 if(fp == NULL) { printf("Cannot open this file!\n "); exit(0); ...
  • c语言指针 ppt文件

    2011-01-25 15:14:29
    让你更简单地掌握c语言指针,是c 语言最重要的变量类型,指针型变量

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 157,230
精华内容 62,892
关键字:

c语言文件指针

c语言 订阅