fwrite的用法(frustrated用法总结)

admin 203 0

大家好,如果您还对fwrite的用法不太了解,没有关系,今天就由本站为大家分享fwrite的用法的知识,包括frustrated用法总结的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!

一、c语言中fread的用法

fread是以记录为单位的I/O函数,fread和fwrite函数一般用于二进制文件的输入输出。下面我就跟你们详细介绍下c语言中fread的用法,希望对你们有用。

size_t fwrite(const void*ptr, size_t size, size_t nmemb, FILE*stream);

返回值:读或写的记录数,成功时返回的记录数等于nmemb,出错或读到文件末尾时返回的记录

fread用于读写记录,这里的记录是指一串固定长度的字节,比如一个int、一个结构体或者一个定长数组。参数size指出一条记录的长度,而nmemb指出要读或写多少条记录,这些记录在ptr所指的内存空间中连续存放,共占size* nmemb个字节,fread从文件stream中读出size* nmemb个字节保存到ptr中,而fwrite把ptr中的size* nmemb个字节写到文件stream中。

nmemb是请求读或写的记录数,fread和返回的记录数有可能小于nmemb指定的记录数。例如当前读写位置距文件末尾只有一条记录的长度,调用fread时指定nmemb为2,则返回值为1。如果当前读写位置已经在文件末尾了,或者读文件时出错了,则fread返回0。如果写文件时出错了,则fwrite的返回值小于nmemb指定的值。下面的例子由两个程序组成,一个程序把结构体保存到文件中,另一个程序和从文件中读出结构体

/*-------------------writerec.c---------------*/

struct record array[2]={{"Ken", 24},{"Knuth", 28}};

FILE*fp= fopen("recfile","w");

fwrite(array, sizeof(struct record), 2, fp);

/*-------------------readrec.c-----------------*/

FILE*fp= fopen("recfile","r");

fread(array, sizeof(struct record), 2, fp);

printf("Name1:%s\tAge1:%d\n", array[0].name, array[0].age);

printf("Name2:%s\tAge2:%d\n", array[1].name, array[1].age);

发现生成的文件recfile不能直接打开。

原因:我们把一个struct record结构体看作一条记录,由于结构体中有填充字节,每条记录占16字节,

把两条记录写到文件中共占32字节。该程序生成的recfile文件是二进制文件而非文本文件,因为其

中不仅保存着字符型数据,还保存着整型数据24和28(在od命令的输出中以八进制显示为030和034)。

注意,直接在文件中读写结构体的程序是不可移植的,如果在一种平台上编译运行writebin.c程序,

把生成的recfile文件拷到另一种平台并在该平台上编译运行readbin.c程序,则不能保证正确读出

文件的内容,因为不同平台的大小端可能不同(因而对整型数据的存储方式不同),结构体的填充方式

也可能不同(因而同一个结构体所占的字节数可能不同,age成员在name成员之后的什么位置也可能不同)。

通过readrec程序读取文件recfile的内容,说明writerec程序的确记录成功写入recfile中。

char*str="hello,I am a test program!";

fwrite(str,sizeof(char),strlen(str),fp)

char str[]={'a','b','c','d','e'};

fwrite(str,sizeof(char),sizeof(str),fp)

fwrite(a,sizeof(int),nmemb,fp)

注:由于程序生成的文件是二进制文件而非文本文件,因此,不用机器,整数的表达不同,

所以无法直接打开生成文件。可通过fread函数检验数据是否写入文件。

二、C语言fwrite怎么写入文件

C语言fwrite写入文件可以参考以下的代码:

fp=fopen("stu.dat","wb");//以二进制可写方式打开stu.dat文件

//将40个学生的记录写入文件stu.dat中

fwrite(&stud[i],sizeof(structStudent_type),1,fp);

size_t fwrite(const void* buffer, size_t size, size_t count, FILE* stream);

返回值:返回实际写入的数据块数目

1、buffer:是一个指针,对fwrite来说,是要获取数据的地址

3、count:要进行写入size字节的数据项的个数

5、返回实际写入的数据项个数count

说明:写入到文件的哪里与文件的打开模式有关,如果是w+,则是从file pointer指向的地址开始写,替换掉之后的内容,文件的长度可以不变,stream的位置移动count个数;如果是a+,则从文件的末尾开始添加,文件长度加大。

fseek对此函数有作用,但是fwrite函数写到用户空间缓冲区,并未同步到文件中,所以修改后要将内存与文件同步可以用fflush(FILE*fp)函数同步。

三、用fwrite函数如何实现换行

1、fwrite是C语言函数,指向文件写入一个数据块。

2、功能:C语言函数,向文件写入一个数据块

3、size_t fwrite(const void* buffer, size_t size, size_t count, FILE* stream);

4、注意:这个函数以二进制形式对文件进行操作,不局限于文本文件

5、返回值:返回实际写入的数据块数目

6、(1)buffer:是一个指针,对fwrite来说,是要获取数据的地址;

7、(2)size:要写入内容的单字节数;

8、(3)count:要进行写入size字节的数据项的个数;

9、(5)返回实际写入的数据项个数count。

10、说明:写入到文件的哪里?这个与文件的打开模式有关,如果是w+,则是从file pointer指向的地址开始写,替换掉之后的内容,文件的长度可以不变,stream的位置移动count个数;如果是a+,则从文件的末尾开始添加,文件长度加大。

11、fseek对此函数有作用,但是fwrite[1]函数写到用户空间缓冲区,并未同步到文件中,所以修改后要将内存与文件同步可以用fflush(FILE*fp)函数同步。

12、if((stream= fopen("TEST.$$$","wb"))== NULL)/* open file TEST.$$$*/

13、fprintf(stderr,"Cannot open output file.\n");

14、fwrite(&s, sizeof(s), 1, stream);/*写的struct文件*/

四、c语言文件操作fwrite和fread

fread是C语言标准为中的一个函数。它从一个文件流中读数据,最多读取count个元素,每个元素size字节,如果调用成功返回实际读取到的元素个数,如果不成功或读到文件末尾返回 0。

fwrite是C语言标准库中的一个函数,指向文件写入一个数据块。示例如下:

size_tresult;//返回值是读取的内容数量

pFile=fopen("myfile.bin","rb");

if(pFile==NULL){fputs("Fileerror",stderr);exit(1);}//如果文件错误,退出1

fseek(pFile,0,SEEK_END);//指针移到文件末位

lSize=ftell(pFile);//获得文件长度

rewind(pFile);//函数rewind()把文件指针移到由stream(流)指定的开始处,同时清除和流相关的错误和EOF标记

buffer=(char*)malloc(sizeof(char)*lSize);//分配缓冲区,按前面的lSize

if(buffer==NULL){fputs("Memoryerror",stderr);exit(2);}//内存分配错误,退出2

result=fread(buffer,1,lSize,pFile);//返回值是读取的内容数量

if(result!=lSize){fputs("Readingerror",stderr);exit(3);}//返回值如果不和文件大小,读错误

pFile=fopen("myfile.bin","wb");//打开文件写操作

fwrite(buffer,1,sizeof(buffer),pFile);//把浮点数组写到文件myfile.bin

pFile=fopen("myfile.bin","rb");//重新打开文件读操作

fread(read,1,sizeof(read),pFile);//从文件中读数据

printf("%f\t%f\t%f\n",read[0],read[1],read[2]);

五、VC++中fwrite函数的用法是什么

1、 size_t fwrite(const void*buffer,size_t size,size_t count,FILE*stream);

2、返回值:返回实际写入的数据块数目

3、(1)buffer:是一个指针,对fwrite来说,是要输出数据的地址。

4、(2)size:要写入内容的单字节数;

5、(3)count:要进行写入size字节的数据项的个数;

6、说明:写入到文件的哪里?这个与文件的打开模式有关,如果是r+,则是从file pointer指向的地址开始写,替换掉之后的内容,文件的长度可以不变,stream的位置移动cout个数。;如果是a+,则从文件的末尾开始添加,文件长度加大,而且是fseek函数对此函数没有作用。

文章到此结束,如果本次分享的fwrite的用法和frustrated用法总结的问题解决了您的问题,那么我们由衷的感到高兴!