C语言怎样从/向数据⽂件读/写结构?

一、问题

        从数据⽂件读结构或者向数据⽂件写结构,都可以很轻松地使⽤⽂件读写函数实现, 如使⽤ fwrite( ) 函数写⼀个结构,使⽤ fread( ) 函数读⼀个结构,但是这样读写出的⽂件却不能移植。怎么从/向数据⽂件读/写结构才能更好呢?

二、解答

        使⽤ fread( ) 和 fwite( ) 函数读写数据⽂件很常见,⽤来读写⼀个数据块,它们的⼀般形式为:

fread(buffer,size,count,fp); 
fwrite(buffer,size,count,fp);

        buffer 是⼀个指针,对 fread( ) 函数来说是指向读⼊数据存放的地址,对 fwrite( ) 来说是指向要输出数据的地址;size 为要读写的字节数;count 为多少个 size 字节的数据项:fp为⽂件指针。

说明:

        如果⽂件以⼆进制形式打开,⽤以上这两个函数就可以读写任何类型的信息。 举例说明从数据⽂件读结构。

        例如,有⼀个⾃定义的结构体类型 student 为:

struct student
{
char name[20]; 
int age; 
int number;
}stu[10];

        结构体数组 stu 有 10 个元素,每⼀元素⽤来存放⼀个学⽣的数据(包括姓名、年龄、学号)。10 名学⽣的信息已经存储到指定的磁盘⽂件中,可以使⽤ fread( ) 函数读此结构信息。例如:

for(i = 0;i < 10;i++)fread(&stu[i],sizeof(struct student),1,fp);

说明:

        fwrite( ) 函数应⽤同样的⽅法可以向磁盘⽂件写⼊信息。

        虽然应⽤上述函数可以向数据⽂件读写结构,但是这样写出的⽂件不能移植。最好的移植⽅法是⽤⽂本⽂件,使⽤ fprintf( ) 函数写⼊,使⽤ fscanf( ) 函数读⼊,或类似的函数。

        同时还应注意,如果结构包含任何指针,则只有指针值会被写⼊⽂件,当它们再次读回来的时候,很可能⼰经失效。最后为了⼴泛地移植,必须使⽤ “ b ” 标志打开⽂件。 移植性更好的⽅案是写⼀对函数,⽤可移植的⽅式按域读写结构,不过开始可能⼯作量稍⼤。

三、总结

        在从数据⽂件读结构或者向数据⽂件写结构时,都应注意所使⽤的函数是应⽤于⼆进制⽂件还是⽂本⽂件,按照要求以相应的打开⽅式打开⽂件,否则容易出现乱码。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/8099.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL分区与分片:深入解析原理与应用

在大数据和高并发的应用场景中&#xff0c;MySQL的单一表可能会遇到性能瓶颈或存储限制。为了解决这个问题&#xff0c;MySQL提供了分区&#xff08;Partitioning&#xff09;和分片&#xff08;Sharding&#xff09;两种技术。虽然它们的目的都是为了提升性能&#xff0c;但实…

【python数据分析基础】—pandas透视表和交叉表

目录 前言一、pivot_table 透视表二、crosstab 交叉表三、实际应用 前言 透视表是excel和其他数据分析软件中一种常见的数据汇总工具。它是根据一个或多个键对数据进行聚合&#xff0c;并根据行和列上的分组键将数据分配到各个矩形区域中。 一、pivot_table 透视表 pivot_tabl…

【MySQL】MySQL基本知识点

目录 1.SQL分类&#xff1a; 2.DDL-数据库操作 3.DDL-表操作-创建 4.DDL-表操作-查询 5.DDL-表操作-数据类型 6.DDL-表操作-修改 1.SQL分类&#xff1a; 2.DDL-数据库操作 3.DDL-表操作-创建 注意&#xff1a;里面的符号全部要切换为英文状态 4.DDL-表操作-查询 5.DDL…

车路云一体化简介

车路云一体化 车路云一体化融合控制系统&#xff08; System of Coordinated Control by Vehicle-Road-Cloud Integration&#xff0c;SCCVRCI&#xff09;&#xff0c;是利用新一代信息与通信技术&#xff0c; 将人、车、路、云的物理层、信息层、应用层连为一体&#xff0c;…

Linux网络编程(三)IO复用二 poll系统调用

二、poll系统调用 2.1、API poll系统调用和select类似&#xff0c;也是在指定时间内轮询一定数量的文件描述符&#xff0c;以测试其中是否有就绪者。 #include <poll.h>int poll(struct pollfd* fds, nfds_t nfds, int timeout);fds参数是一个pollfd结构类型的数组&am…

切实有效的提高VMWARE游戏性能-各版本通杀 vm17pro

这里的游戏性能&#xff0c;当然了&#xff0c;特别指出的是3D性能&#xff0c;毕竟现在2D也很少了。 因为平时没啥事&#xff0c;所以&#xff0c;无聊就跟朋友挂挂游戏&#xff0c;没事写点代码折腾下。所以&#xff0c;免不了跟VMWARE搭上边。走了很多的弯路&#xff0c;中…

使用动态种子的DGA:DNS流量中的意外行为

Akamai研究人员最近在域名系统&#xff08;DNS&#xff09;流量数据中观察到&#xff1a;使用动态种子的域名生成算法&#xff08;Domain Generation Algorithm&#xff0c;DGA&#xff09;的实际行为&#xff0c;与对算法进行逆向工程推测的预期行为之间存在一些差异。也就是说…

Android 系统启动流程源码分析

一、Init进程启动 是一个由内核启动的用户级进程。内核自行启动之后&#xff0c;就通过启动一个用户级程序init的方式&#xff0c;完成引导进程。 启动的代码init.c中的main函数执行过程&#xff1a;system\core\init.c中&#xff1a; 主要下面两个重要的过程&#xff1a; 1…

批量将GOID转成GO term名并添加BP,MF,CC分类信息

基因本体论&#xff08;Gene Ontology&#xff0c;GO&#xff0c;https://www.geneontology.org&#xff09;是一个广泛应用于生物信息学领域的知识库&#xff0c;它提供了一套标准化的词汇和分类体系&#xff0c;用于描述基因功能、细胞组分和生物过程。GO旨在统一科研人员对基…

无人机+垂直起降:微型共轴双旋翼无人机技术详解

微型共轴双旋翼无人机技术是一种独特的无人机设计&#xff0c;它结合了垂直起降&#xff08;VTOL&#xff09;能力和微型无人机的灵活性。这种设计允许无人机在无需跑道的情况下垂直起降&#xff0c;并具备在空中悬停和执行各种飞行动作的能力。 适用于集群控制&#xff0c;荷载…

自动选择图表类型:基于数据特征智能决策

前言 在数据可视化的世界中&#xff0c;选择正确的图表类型对于有效地传达信息至关重要。图表类型的选择不仅影响数据的呈现方式&#xff0c;而且直接影响观众对数据的理解。自动选择图表类型可以大大简化数据分析的流程&#xff0c;尤其是在处理动态源或大量数据集时。本文将…

NXP i.MX8系列平台开发讲解 - 1.1 导读前言

专栏文章目录传送门&#xff1a;返回专栏目录 文章目录 目录 1. 本专辑介绍 2. 学习本专辑作用 3.关于作者 1. 本专辑介绍 本专辑将会介绍Linux 驱动开发&#xff0c;Android BSP 驱动涉及HAL层调试&#xff0c;适用于嵌入式软件开发人员&#xff0c;和有兴趣向该方向发展…

基于单片机的无线数据传输系统设计

摘要:基于单片机的无线数据传输系统的设计,实现了温度和湿度的自动采集、无线通讯和报警功能。该系统包括了LCD1602显示电路、DHT11温湿度采集电路等,完成了基于无线数据传输的方法来实现温湿度的采集。 关键词:温湿度检测;N RF 24 L 01;单片机 0 引言 随着科技水平的提高,…

五一 大项目

Docker 中的 Nginx 服务为什么要启用 HTTPS 一安装容器 1 安装docker-20.10.17 2 安装所需的依赖 sudo yum install -y yum-utils device-mapper-persistent-data lvm23 添加Docker官方仓库 sudo yum-config-manager --add-repo https://download.docker.com/linux/centos…

前端实现导入Excel进行数据展示、导出

需求 一个 excel 文档 需要对文档里面的数据进行筛选拆分重组 由于数据量巨大 后端又抽不出来手 于是使用纯前端解决方案 解决思路 前端导入excel 把 excel 的数据解析为 json 格式 对数据进行相应操作后 重新导出为新 excel 虽笨但有效 第一步 导入excel 该方案需引…

Promise魔鬼面试题

文章目录 题目解析难点分析分析输出step1step2step3step4step5step6 参考/致谢&#xff1a;渡一袁老师 题目 Promise.resolve().then(() > {console.log(0);return Promise.resolve(4);}).then((res) > {console.log(res);});Promise.resolve().then(() > {console.l…

spark sql 与scala混合开发实现数据入mongodb

目录 概述资源解决问题效果环境配置相关包关键代码 测试测试结果 概述 在此提供 spark sql 与scala混合开发实现数据入mongodb 相关思路 将部分重复性功能进行通用化(使用SQL与Scala混合开发模式)。 相关组件 hadoop 3.3.6 spark 3.4.2 kyuubi 1.8.0 基于上术组件开发 资源 …

QT设计模式:抽象工厂模式

基本概念&#xff1a; 抽象工厂模式是一种创建型设计模式&#xff0c;封装了一组相关或依赖的对象的创建逻辑&#xff0c;而不需要指定具体的类。 使用抽象工厂模式&#xff0c;客户端可以创建一系列相关的对象&#xff0c;而无需关心这些对象的具体实现细节&#xff0c;从而…

uniapp video 层级覆盖

层级覆盖 cover-view组件 我这里做了个判断 监听全屏时隐藏按钮 根据项目需求自行更改

c++ 判断点和折线 距离

目录 点在折线y方向的投影的距离 判断点是否在折线下方&#xff0c;不求距离 点在折线y方向的投影的距离 x相同时&#xff0c;y的差异。 #include <iostream> #include <vector> #include <cmath> #include <limits>struct Point {double x, y; };…