大家好,如果您还对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用法总结的问题解决了您的问题,那么我们由衷的感到高兴!