C:通过fwrite和fread读写数据结构

news/2024/12/27 16:32:27/

有的时候存放在文件中的内容是固定的数据结构,这样通过fwrite和fread进行读写会更加方便。

fwrite可以将数据结构写入文件

size_t fwrite (const void *buffer, size_t size, size_t num, FILE *stream)
参数说明:
buffer:包含数据的数据单元地址
size:每个数据单元所占的字节数
num:需要写入的数据单元的个数
stream:目的文件指针
返回值:
实际写入目的文件的数据结构单元个数

fread可以从文件中读取数据结构

size_t fread( void *buffer, size_t size, size_t count, FILE *stream)
参数说明:
buffer:读取文件后,将数据写入的数据结构地址
size:数据结构所占字节数
count:要读取的数据结构单元的最大数量
stream:目的文件指针
返回值:
函数读取的完整项数,返回值可能小于 count(发生错误时,或者在到达 count之前遇到文件的末尾)
#include <stdio.h>
#include <string.h>//将要读写的数据结构
struct Data{char a[20];char b[20];int c;
};void write_to_file()
{FILE *fp = fopen("./test.txt", "w");if(fp){struct Data data1 = {"hello1", "world1", 188};fwrite(&data1, sizeof(data1), 1, fp);    //写入数据结构struct Data data2 = {"hello2", "world2", 288};\fwrite(&data2, sizeof(data2), 1, fp);    //写入数据结构fclose(fp);}
}void read_from_file()
{FILE *fp = fopen("./test.txt", "r");if(fp){struct Data data[5];int ret = 0;int i = 0;while(i < 5){//读取数据结构ret = fread(data + i, sizeof(struct Data), 1, fp);if( ret > 0){//读取到内容++i;}else{//到达文件尾break;}}fclose(fp);for(int j = 0; j < i; j++){printf("read:%s %s %d\n", data[j].a, data[j].b, data[j].c);}}
}int main ()
{write_to_file();read_from_file();return 0;
}
运行程序输出:
read:hello1 world1 188
read:hello2 world2 288
可以看到数据被正确的读取出来。


http://www.ppmy.cn/news/11246.html

相关文章

Mysql底层原理与性能调优

在工作中&#xff0c;公司就线上生产环节&#xff0c;有没有时常碰到过一些慢SQL查询&#xff0c;那我相信大多时候第一时间想到的优化策略&#xff0c;我相信肯定就是索引&#xff0c;可能第一时间就会想到&#xff0c;看一下SQL是不是有加合适的索引&#xff0c;它的条件里面…

Redis高可用心路历程以及多种业务场景下的使用模式

Redis高可用心路历程1、单节点下的redis热点数据的缓存计数器缓存过期时间分布式锁单节点带来的问题1. redis单点发生故障&#xff0c;数据丢失&#xff0c;影响整体服务应用2、单节点redis自身资源有限&#xff0c;无法承载更多资源分配3、并发访问&#xff0c;给服务器主机带…

flink规则引擎设计思路

在日常工作中我们经常收到一些诸如此类需求&#xff1a;“用户给点击了开屏广告&#xff0c;给用户下发私信”、“用户进入了推荐线&#xff0c;但在60秒内没有任何点击操作&#xff0c;弹框引导用户选择感兴趣的内容”、“用户点赞了某位作者的两篇以上的内容&#xff0c;但并…

CSDN第22场周赛

1.写在前面的话22场周赛的详情总比赛第7名了&#xff0c;hhhCSDN周赛非常能够锻炼码代码的能力&#xff0c;无论是在平常的练习题目当中&#xff0c;还是每次的周赛中&#xff0c;题目有难有易&#xff0c;每次周赛的题目出的十分具有代表性&#xff0c;参加了将近20场的周赛&a…

【洛谷】P2345 [USACO04OPEN] MooFest G

1:暴力AC&#xff08; ans (long long)(max(arr[i].v, arr[j].v) * abs(arr[i].x - arr[j].x));&#xff09;#include<iostream> #include<cmath> using namespace std; int n; struct s {int v, x; }arr[20005]; long long ans; int main() {cin >> n;for …

自定义类型:结构体,枚举,联合(1)

tips 1. 2. 结构基础知识复习 1. 结构是一些值的集合&#xff0c;这些值被称为成员变量&#xff0c;结构的每个成员可以是不同类型的变量。 2. 结构体类型&#xff0c;结构体成员&#xff0c;结构体变量&#xff0c;结构体指针的创建方式 3. 初始化结构体变量的时候&…

Java文件IO操作

目录 一、了解什么是文件 狭义的文件&#xff1a; 广义的文件&#xff1a; 二、文件的路径 ①文件的绝对路径 ②文件的相对路径 三、Java对于文件的操作 File类的构造方法 File类的普通方法 四、对于文件的内容操作 ①FileInputStream&#xff08;文件输入流&#xf…

【计算机视觉】Pooling层的作用以及如何进行反向传播

问题 CNN网络在反向传播中需要逐层向前求梯度,然而pooling层没有可学习的参数,那它是如何进行反向传播的呢? 此外,CNN中为什么要加pooling层,它的作用是什么? Pooling层 CNN一般采用average pooling或max pooling来进行池化操作,而池化操作会改变feature map的大小,…