【C 语言】文件操作 ( fwrite 函数 )
文章目录
二进制文件读写两个重要的函数 , fread 和 fwrite , fread 用于读取文件 , fwrite 用于写出文件 ;
fread / fwrite 函数 既可以操作 二进制文件 , 又可以操作 文本文件 ;
getc / putc 函数 , fscanf / fprintf 函数 , fgets / fgets 函数 , 只能用于操作 文本文件 ;
一、fwrite 函数
函数原型 :
size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream)
参数胡说明 :
const void *ptr : 指针指向要写出数据的内存首地址 ;
size_t size : 要写出数据的 基本单元 的字节大小 , 写出单位的大小 ;
size_t nmemb : 要写出数据的 基本单元 的个数 ;
FILE *stream : 打开的文件指针 ;
返回值说明 : size_t 返回值返回的是实际写出到文件的 基本单元 个数 ;
二、fwrite 示例
fwrite 函数示例 :
#include <stdio.h>
int main()
{
// 使用 "wb" 二进制写的方式打开文件
FILE *p = fopen("D:\\a.txt", "wb");
// 用于写出数据的缓冲区
char buffer[1024] = {0};
// 设置缓冲区数值
buffer[0] = 'H';
buffer[1] = 'e';
buffer[2] = 'l';
buffer[3] = 'l';
buffer[4] = 'o';
// buffer : 将指针对应的内存的写出到文件中
// sizeof(char) : 写出的基本单元字节长度
// sizeof(buffer) : 写出的基本单元个数,
// 写出字节个数是 sizeof(buffer) * sizeof(char)
// p : 文件指针
// 返回值 : fwrite 函数返回值表示写出到的 基本单元 的个数
size_t count = fwrite(buffer, sizeof(char), 5, p);
// 打印写出的内容和写出的 基本单元 个数
printf("fread : buffer = %s , write count = %u\n", buffer, count);
// 逐个字节打印读取出数据的 ASCII 码
int i = 0;
for(i = 0; i < count; i ++){
printf("buffer[%d] = %x, %c\n", i, buffer[i], buffer[i]);
}
printf("Main End\n");
return 0;
}
执行结果 :
命令行输出 :
fread : buffer = Hello , write count = 5
buffer[0] = 48, H
buffer[1] = 65, e
buffer[2] = 6c, l
buffer[3] = 6c, l
buffer[4] = 6f, o
Main End
运行结果 :
输出文件验证 :
写出到的文件内容 : D:\a.txt 文件中的文本内容 ;
Hello
输出文件大小 : 右键查看该文件的属性 , 大小
字节 ;
二进制文件分析 : 使用二进制文件查看工具打开该文件 , 发现该文件中只有
个字符 ;
三、fwrite 示例 ( 写出数据超出实际有效值 )
fwrite 函数示例 : 在上面的示例中 , 只给缓冲区设置了
5 个字节的数据 , 即 " Hello " 字符 , 只向文件写出
5 字节数据 ; 但是如果写出
20 个字节 , 就会将后续的
15 个字节的 ‘\0’ 也进行写出 ;
#include <stdio.h>
int main()
{
// 使用 "wb" 二进制写的方式打开文件
FILE *p = fopen("D:\\a.txt", "wb");
// 用于写出数据的缓冲区
char buffer[1024] = {0};
// 设置缓冲区数值
buffer[0] = 'H';
buffer[1] = 'e';
buffer[2] = 'l';
buffer[3] = 'l';
buffer[4] = 'o';
// buffer : 将指针对应的内存的写出到文件中
// sizeof(char) : 写出的基本单元字节长度
// sizeof(buffer) : 写出的基本单元个数,
// 写出字节个数是 sizeof(buffer) * sizeof(char)
// p : 文件指针
// 返回值 : fwrite 函数返回值表示写出到的 基本单元 的个数
size_t count = fwrite(buffer, sizeof(char), 20, p);
// 打印写出的内容和写出的 基本单元 个数
printf("fread : buffer = %s , write count = %u\n", buffer, count);
// 逐个字节打印读取出数据的 ASCII 码
int i = 0;
for(i = 0; i < count; i ++){
printf("buffer[%d] = %x, %c\n", i, buffer[i], buffer[i]);
}
printf("Main End\n");
return 0;
}
执行结果 :
命令行输出 :
fread : buffer = Hello , write count = 5
buffer[0] = 48, H
buffer[1] = 65, e
buffer[2] = 6c, l
buffer[3] = 6c, l
buffer[4] = 6f, o
Main End
运行结果 :
输出文件验证 :
写出到的文件内容 : D:\a.txt 文件中的文本内容 , 后面几个乱码复制不上 ;
Hello
输出文件大小 : 右键查看该文件的属性 , 大小 20 字节 ;
二进制文件分析 : 使用二进制文件查看工具打开该文件 , 发现该文件中只有
20 个字符 , 后面的 15 个字符都是 ‘\0’ ;
四、fwrite 示例 ( 输出 int 整型到二进制文件中 )
输出 int 整型到二进制文件中 :
#include <stdio.h>
int main()
{
// 使用 "wb" 二进制写的方式打开文件
FILE *p = fopen("D:\\a.txt", "wb");
// 设置写入变量
int number = 0x12345678;
// buffer : 将指针对应的内存的写出到文件中
// sizeof(char) : 写出的基本单元字节长度
// sizeof(buffer) : 写出的基本单元个数,
// 写出字节个数是 sizeof(buffer) * sizeof(char)
// p : 文件指针
// 返回值 : fwrite 函数返回值表示写出到的 基本单元 的个数
size_t count = fwrite(&number, sizeof(int), 1, p);
printf("Main End\n");
return 0;
}
输出结果 : 下图中有 代码 , 命令行 , 文本内容 , 二进制内容 ; 其中二进制内容为
, 这是小端存储 , 低位放在内存低字节 , 高位放在内存高字节 , 利于存储 , 不利于阅读 ;
大端格式 与之想法 , 利于阅读 , 不利于存储 ;
相关文章
- c语言处理excel表格_c语言一般文件的处理过程
- 2.Go语言之文件操作学习记录.md
- c语言用命令行打开文件_c语言无法打开文件
- 【C 语言】文件操作 (fscanf、fprintf 函数)
- 【C 语言】文件操作 ( fread 函数 )
- 【C 语言】文件操作 ( 使用 fread 和 fwrite 实现二进制文件的拷贝 | stat 统计文件大小 | feof 判定文件结尾 )
- 【C 语言】文件操作 ( ftell 函数 | 使用 ftell 函数获取当前指针位置 | 通过 ftell 计算文件大小 )
- 【C 语言】文件操作 ( fseek 使用注意事项 | fseek 函数返回值分析 )
- 【C 语言】文件操作 ( 学生管理系统 | 命令行接收数据填充结构体 | 结构体写出到文件中 | 查询文件中的结构体数据 )
- 【C 语言】文件操作 ( 按照文本行的方式读写文件 | fgets 函数 | fputs 函数 )
- 【C 语言】文件操作 ( 配置文件读写 | 业务逻辑 | 接口设计 )
- 【C 语言】文件操作 ( 配置文件读写 | 完整代码示例 ) ★
- 【C 语言】文件操作 ( 文件加密解密 | 加密解密原理 | 对称加密 | 非对称加密 | 散列函数 )
- 【C 语言】文件操作 ( 文件加密解密 | 加密解密原理 | 对称加密原理 | 非密钥整数倍长度的数据加密处理 )
- 【C 语言】文件操作 ( 文件加密解密 | 使用第三方 DES 加密解密库 | 头文件导入 | 兼容 C++ 语言 | 加密解密函数说明 )
- 【C 语言】文件操作 ( 文件加密解密 | 加密文件 )
- 【C 语言】文件操作 ( 文件加密解密 | 解密文件 )
- 【错误记录】在 Android Studio 的 Terminal 终端执行 gradlew 报错 ( 无法将“gradlew”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称 )
- Go语言二进制文件的读写操作
- 快速备份Linux 命令快速实现文件备份(linux命令实现)
- 学习如何用 C 语言来进行文件输入输出操作
- 如何在 Linux 中使用 C 语言拷贝文件(linuxc拷贝文件)
- c语言全盘搜索指定文件的实例代码
- GO语言文件的创建与打开实例分析