百度百科中关于fwrite的用法说明

简介: size_t fwrite(const void* buffer, size_t size, size_t count, FILE* stream); 注意:这个函数以二进制形式对文件进行操作,不局限于文本文件 返回值:返回实际写入的数据块数目 (1)buffer:是一个指针,对fwrite来说,是要获取数据的地址; (2)size:要写入内容的单字节数; (3)count:要进
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+,则是从file pointer指向的地址开始写,替换掉之后的内容,文件的长度可以不变,stream的位置移动count个数;如果是a+,则从文件的末尾开始添加,文件长度加大。
fseek对此函数有作用,但是fwrite [1]  函数写到用户空间缓冲区,并未同步到文件中,所以修改后要将内存与文件同步可以用fflush(FILE *fp)函数同步。

4
程序示例 编辑
示例一:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
struct mystruct
{
     int i;
     char cha;
};
 
int main( void )
{
     FILE *stream;
     struct mystruct s;
     if ((stream = fopen ( "TEST.$$$" , "wb" )) == NULL) /* open file TEST.$$$ */
     {
         fprintf (stderr, "Cannot open output file.\n" );
         return 1;
     }
     s.i = 0;
     s.cha = 'A' ;
     fwrite (&s, sizeof (s), 1, stream); /* 写的struct文件*/
     fclose (stream); /*关闭文件*/
     return 0;
}
示例二:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include<stdio.h>
#define SIZE 1
typedef struct
{
     char name[10];
     int num;
     int age;
     char addr[15];
     }student;
 
student stu[SIZE];
 
void save()
{
     FILE *fp;
     int i;
     if ((fp= fopen ( "dat.txt" , "w" ))==NULL)
     {
         printf ( "无法打开此文件!\n" );
         return ;
     }
     for (i=0;i<SIZE;i++)
     if ( fwrite (&stu[i], sizeof (student), 1, fp) != 1)
     printf ( "文件写入错误。!\n" );
     fclose (fp);
}
 
void main()
{
     int i;
     for (i=0;i<SIZE;i++)
         scanf ( "%s%d%d%s" ,&stu[i].name,&stu[i].num,&stu[i].age,&stu[i].addr);
     save();
}
示例三:
1
2
3
4
5
6
7
8
9
10
11
/* fwrite example : write buffer */
#include <stdio.h>
int main ()
{
     FILE * pFile;
     char buffer[] = { 'x' , 'y' , 'z' };
     pFile = fopen ( "myfile.bin" , "wb" );
     fwrite (buffer , sizeof (buffer), 1 , pFile );
     fclose (pFile);
     return 0;
}
称为myfile.bin的一个文件被创建并存储到它的缓冲区的内容。为了简单起见,该缓冲区包含Char元素,但它可以包含任何其他类型。.
sizeof(buffer) 字节数组的长度(在这种情况下,它是三个,因为数组有三个元素,每次一个字节)。
示例四:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//程序示例 fwrite fread fseek
#include <stdio.h>
int main ()
{
     FILE *fp;
     char msg[] = "file content" ;
     char buf[20];
     fp = fopen ( "d:\\a\\a.txt" , "w+" );
     if (NULL == fp)
     {
         printf ( "The file doesn't exist!\n" );
         return -1;
     }
     fwrite (msg, strlen (msg),1,fp); //把字符串内容写入到文件
     fseek (fp,0,SEEK_SET); //定位文件指针到文件开始位置
     fread (buf, strlen (msg),1,fp); //把文件内容读入到缓存
     buf[ strlen (msg)] = '\0' ; //删除缓存内多余的空间
     printf ( "buf = %s\n" ,buf);
     printf ( "strlen(buf) = %d\n" , strlen (buf));
     return 0;
}

目录
相关文章
|
存储 前端开发 开发工具
git clone -mirror 和 git clone 的区别
git clone -mirror 和 git clone 的区别
|
存储 Unix Linux
文件的时间戳
文件的时间戳
488 0
|
开发工具 git
如何把git仓库(包含所有提交历史)迁移到gitlab
在gitlab上new 一个project 跳转到本地的git 目录中,运行命令 git remote add gitlab gitlab_new_project_address -最后运行如下命令,将本地git仓库push到server: git push gitlab master ...
4970 0
|
4天前
|
搜索推荐 编译器 Linux
一个可用于企业开发及通用跨平台的Makefile文件
一款适用于企业级开发的通用跨平台Makefile,支持C/C++混合编译、多目标输出(可执行文件、静态/动态库)、Release/Debug版本管理。配置简洁,仅需修改带`MF_CONFIGURE_`前缀的变量,支持脚本化配置与子Makefile管理,具备完善日志、错误提示和跨平台兼容性,附详细文档与示例,便于学习与集成。
288 116
|
19天前
|
域名解析 人工智能
【实操攻略】手把手教学,免费领取.CN域名
即日起至2025年12月31日,购买万小智AI建站或云·企业官网,每单可免费领1个.CN域名首年!跟我了解领取攻略吧~
|
6天前
|
数据采集 人工智能 自然语言处理
Meta SAM3开源:让图像分割,听懂你的话
Meta发布并开源SAM 3,首个支持文本或视觉提示的统一图像视频分割模型,可精准分割“红色条纹伞”等开放词汇概念,覆盖400万独特概念,性能达人类水平75%–80%,推动视觉分割新突破。
408 38
Meta SAM3开源:让图像分割,听懂你的话
|
13天前
|
安全 Java Android开发
深度解析 Android 崩溃捕获原理及从崩溃到归因的闭环实践
崩溃堆栈全是 a.b.c?Native 错误查不到行号?本文详解 Android 崩溃采集全链路原理,教你如何把“天书”变“说明书”。RUM SDK 已支持一键接入。
670 220