c++ - 如何将二进制数据文件中的信息读入结构数组 C++

标签 c++ arrays structure

我是一名 C++ 初学者。我有一个包含员工信息的结构数组。 我可以将值放入结构中,将这些值写入二进制 dat 文件,然后 将值读回程序,以便它可以显示到控制台。 这是我的问题。关闭程序后,我无法让文件将文件中的数据读回内存 - 而是读取“垃圾”。

我尝试了一些东西,然后在我的书中读到了这个:

NOTE: Structures containing pointers cannot be correctly stored to disk using the techniques of this section. This is because if the structure is read into memory on a subsequent run of the program, it cannot be guaranteed that all program variables will be at the same memory locations.

我很确定这就是当我尝试打开一个包含先前存储的信息的 .dat 文件并尝试将其读入结构数组时发生的情况。

如果这有助于澄清我的问题,我可以发送我的代码示例。 如有任何建议,我们将不胜感激。

最佳答案

一般来说(因为我没有你的代码)有两个原因你通常不应该只将结构或类的字节写入文件:

  • 正如您在书中提到的那样,将指针写入磁盘毫无意义,因为您只是存储了一个随机地址,而不是该地址上的数据。您需要自己写出数据。

  • 特别是不应该尝试用类似的东西一次写一个结构/类 fwrite(文件,myStruct,sizeof(myStruct))。编译器有时会在结构中的变量之间放置空字节,以便让处理器更快地读取它们 - 这称为 padding .使用不同的编译器或为不同的计算机体系结构编译可以不同地填充结构,因此在一台计算机上正确打开的文件可能无法在另一台计算机上正确打开。

有很多方法可以将数据写入文件,无论是二进制格式还是某种人类可读的格式,如 XML。无论您选择使用哪种方法(每种方法都有优点和缺点),每一种方法都涉及将您希望保存的每条数据一条一条地写入,然后一条一条地读回。 Java 或 C# 等高级语言可以通过存储有关对象的元数据来自动执行此操作,但这是以更多的内存使用和更慢的程序执行为代价的。

关于c++ - 如何将二进制数据文件中的信息读入结构数组 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13150553/

相关文章:

c - 初始化结构数组,其中包含数组元素

c# - 将代码放在项目的根目录中可以吗?

C++ : alternative for Vector of references to avoid copying large data

c++ - 在赋值运算符函数中,数组是否隐式为 memcpy

c - 返回变量结构成员

c - 解析和嵌套指针

java - 将树布局保存到文件中。如何有效实现?

c++ - 是否可以反编译C++可执行文件

c++ - Visual Studio Code 的 Clang Tidy 插件无法工作/如何设置

c++ - 如何从格式为 "a:b"的字符串数组中填充 C++ 对 vector ?