如何将二进制数据文件中的信息读入结构数组C++; 我是一个初学C++的学生。我有一个保存员工信息的结构数组。 我可以将值放入结构中,将这些值写入二进制dat文件,然后 将这些值读回程序,以便在控制台上显示。 这是我的问题。一旦我关闭程序,我就无法让文件将数据从文件读回内存,而是读取“垃圾”

如何将二进制数据文件中的信息读入结构数组C++; 我是一个初学C++的学生。我有一个保存员工信息的结构数组。 我可以将值放入结构中,将这些值写入二进制dat文件,然后 将这些值读回程序,以便在控制台上显示。 这是我的问题。一旦我关闭程序,我就无法让文件将数据从文件读回内存,而是读取“垃圾”,c++,arrays,structure,C++,Arrays,Structure,我尝试了一些方法,然后在书中读到: 注意:无法将包含指针的结构正确存储到 使用本节中的技术制作磁盘。这是因为如果 在程序的后续运行中,结构被读入内存 无法保证所有的程序变量都是相同的 内存位置 我非常确定,当我试图打开一个包含以前存储信息的.dat文件并尝试将其读入结构数组时,会发生这种情况 如果这有助于澄清我的问题,我可以发送我的代码示例。 如果您有任何建议,我们将不胜感激。一般来说(因为我没有您的代码),有两个原因您通常不应该只将结构或类的字节写入文件: 正如您的书中提到的,将指针写入磁盘

我尝试了一些方法,然后在书中读到:

注意:无法将包含指针的结构正确存储到 使用本节中的技术制作磁盘。这是因为如果 在程序的后续运行中,结构被读入内存 无法保证所有的程序变量都是相同的 内存位置

我非常确定,当我试图打开一个包含以前存储信息的.dat文件并尝试将其读入结构数组时,会发生这种情况

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

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

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

  • 您尤其不应该尝试使用以下内容同时编写结构/类
    fwrite(文件、myStruct、sizeof(myStruct))
    。编译器有时会在结构中的变量之间放置空字节,以便处理器更快地读取它们,这称为。使用不同的编译器或针对不同的计算机体系结构进行编译可能会以不同的方式填充结构,因此在一台计算机上正确打开的文件可能无法在另一台计算机上正确打开


有很多方法可以将数据写入文件,可以是二进制格式,也可以是一些人类可读的格式,如XML。无论您选择使用哪种方法(每种方法都有优点和缺点),每种方法都涉及到逐个写入您想要保存的每一条数据,然后逐个读取它们。Java或C等高级语言有办法通过存储对象的元数据自动实现这一点,但这是以占用更多内存和降低程序执行速度为代价的。

我们需要查看您的实际代码来确定问题。请继续阅读本书。答案很可能会在下一节中。@Industrial Anti-Depression:该标签已被弃用:谢谢大家的评论!第二天我就把它用上了。下次我将在问题中加入代码。