fwrite函数的简介

fwrit函数是一个常用的文件写函数,这个函数比较重要。此处暂时写一下他的一些相关信息,以便给读者提供帮助,成长。
fwrite函数原型:
size_t fwrite(const void* buffer,size_t size, size_t count, FILE* stream);
功能:
向文件中写入一个数据块。(写入的数据不限于文本格式,也可以是二进制文件等)
返回值:返回实际写入的数据块数。
参数:
1) buffer是一个指针。对fwrite来说是要写入数据的地址。
2) size是要写入内容的单字节数。
3) count是要
进行写入size字节的数据项的个数。
4)
stream为目标文件指针
5) 返回实际写入的数据项个数count。

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

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


注意:假如定义buffer缓冲区的大小为1024且第二个参数为1时,那么fread的第三个参数一定要小于等于1024,否则会出现错误。或许大家在学的时候记得比较清楚,实际编程中有可能会忘记。再次特别说明。


关于fwrite第3个参数count解释:

fwrite(const void*buffer,size_t size,size_tcount,FILE*stream);
可以这样理解,将缓冲区buffer的内容写入stream指向的文件
共写count组数据,每组数据有size个字节,

如果有一个结构体
struct AAA
{
char a;
int b;
long c;
float d
};
struct AAA x,y[20];
那么写这个数据到文件就是:
fwrite(x,sizeof(AAA),1,fp);
fwrite(y,sizeof(AAA),20,fp);
当然,因为地址是连续的,你也可以
fwrite(y,sizeof(AAA)*20,1,fp);或者
fwrite(y,1,sizeof(AAA)*20,fp);



这样很别扭
而且第二个参数size的大小是有限制的,
所以最好是用
fwrite(y,sizeof(AAA),20,fp);
来得可靠,安全,方便,清楚

示例代码:
  1. #include   
  2. #include   
  3.   
  4. #define FILENAME ("/home/snail/work_dir/linux_c_work/file.bin")  
  5. #define BUF ("Hello world!\n")  
  6.   
  7. int main()  
  8. {  
  9.     FILE *fp = NULL;  
  10.     int write_length = 0;  
  11.     fp = fopen(FILENAME, "ab+");  
  12.     if(fp == NULL)  
  13.     {  
  14.         return 0;  
  15.     }  
  16.     write_length = fwrite(BUF, 1, strlen(BUF), fp);  
  17.     printf("write_length = %d\n", write_length);  
  18.     fclose(fp);  
  19.     fp = NULL;  
  20.     return 0;     

在文件操作时,需要注意以下几点问题

1、在定义文件指针时,要将文件指针指向空;如 FILE *fp = NULL;
2、文件操作完成后,需要将文件关闭,一定要注意,否则会造成文件所占用内存泄露和在下次访问文件时出现问题。
3、文件关闭后,需要将文件指针指向空,这样做会防止出现游离指针,而对整个工程造成不必要的麻烦;如:fp = NULL;

你可能感兴趣的:(C/C++,win32,VisualStudio,fwrite函数的简介)