我使用C++,與2008年的Visual Studio說我有一個結構,像這樣:C++閱讀結構的領域,直接寫入結構到流
struct StructOfInts
{
int a;
int b;
int c;
};
這意味着要讀取和寫入,如下所示:
void Read(std::istream& is, StructOfInts& myStruct )
{
is.read((char*)&myStruct.a, sizeof myStruct.a);
is.read((char*)&myStruct.b, sizeof myStruct.b);
is.read((char*)&myStruct.c, sizeof myStruct.c);
}
void Write(std::ostream& os, StructOfInts& myStuct)
{
os.write((char*)&myStruct, sizeof myStruct);
}
上述代碼在讀取或寫入文件時會導致某種內存損壞嗎?通過內存損壞,我的意思是讀取不正確的值。我試圖確定正在讀入的-1.#QNB值的來源,並且想知道這是否可能是原因。 另外,如果我使用雜注包打包結構,是否有區別?
沒有使用>>操作符的任何特定原因? – Borgleader
沒有特別的理由。這就是我正在使用的(非常古老的)代碼庫是如何保持一致性的。 – kushaldsouza
我認爲問題出現在這一行:'os.write((char *)&myStruct,sizeof myStruct);'。嘗試按元素寫入「ostream」元素。因爲如果你在64位機器上,可能會有填充,因爲「sizeof(int)」將是32位。 –