我遇到了一個課,我們使用了一個名爲「Person」的用戶定義類型,它將一個人的姓名存儲在char數組中,並將年齡作爲整數存儲起來。這節課是關於編寫和閱讀二進制文件的。主要程序是這樣的:將用戶定義的類型轉換爲char *時發生了什麼?
int main()
{
Person anil("anil",24); //initialize with name and age
fstream file("person.bin", ios::binary | ios::in | ios::out | ios::trunc);
if (!file.is_open())
cout << "Error while opening file.";
else
{
file.write((char*)&anil, sizeof(Person));
file.seekg(0); // go back to beginning
Person anjali; //declare new person object
//first argument is memory block, second argument is byte size
file.read((char*)&anjali, sizeof(Person));
anil.whoAreYou(); //outputs the name and age
anjali.whoAreYou();
}
return 0;
}
我不明白什麼是這些線路發生:
file.write((char*)&anil, sizeof(Person));
file.read((char*)&anjali, sizeof(Person));
據我所知,寫和讀的fstream的功能要求memory_block作爲第一個參數。 ..有人可以解釋當對用戶定義類型的引用轉換爲char *時究竟發生了什麼?
這可能是一個壞主意,只是內存轉儲到磁盤,並認爲有後來工作的希望。這可能包含像std :: string這樣的在其他地方存儲數據的指針或結構。嘗試寫一個適當的序列化方法作爲'operator <<',這樣你就可以執行'file << anil'。 – tadman
*本課程是關於編寫和閱讀二進制文件的。* - 啊哈!這個不好的「教訓」在哪裏教授?我問這個問題,因爲這裏有成千上萬的帖子,海報寫這樣的代碼,並且不明白他們的程序爲什麼不起作用。我猜測有人,某本書或某個網站正在將這些信息提供給新手C++編碼人員。 – PaulMcKenzie
我有一種感覺,這是不好的做法。 – ajw170