我有以下结构
struct MyStruct
{
int param1;
float param2;
double param3;
}
我可以使用它写入二进制文件
fstream binary_file(file, ios::out|ios::binary);
binary_file.seekg(0, ios::beg);
binary_file.write((char *)aStruct,sizeof(MyStruct));
binary_file.close();
我可以使用它来恢复它
ifstream binary_file;
binary_file.open(file, ios::binary);
binary_file.seekg(0, ios::beg);
binary_file.read((char *)aStruct, sizeof(MyStruct));
binary_file.seekg (0, ios::end);
binary_file.close();
这一切都很好。现在将结构的定义更改为
struct MyStruct
{
int param1;
float param2;
double param3;
int paramA;
float paramB;
double paramC
}
问题是,如果我读取在定义更改之前编写的文件,param1、param2 和 param3 是否总是正确设置,我可以确定 paramA、paramB 和 paramC 不会被分配任何垃圾吗?参数只会添加到结构的末尾。
根据参考,如果在读取指定位数之前遇到 eof,ifstream 读取函数应该停止,所以希望这听起来很简单。我的测试还表明,这个问题的答案是肯定的,但是我想和你们确认一下,因为我一直在阅读例如二进制文件中的填充并且不完全理解它是如何工作的。