1

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

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

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

我很确定当我尝试打开具有先前存储的信息的 .dat 文件并尝试将其读入结构数组时,会发生这种情况。

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

4

1 回答 1

0

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

  • 正如你的书所提到的,写一个指向磁盘的指针是没有意义的,因为你只是存储一个随机地址而不是那个地址的数据。您需要写出数据本身。

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

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

于 2012-10-31T03:28:40.370 回答