0
我寫在Linux下C++程序中,我有一個結構命名列表:寫一個結構二進制文件和閱讀它
struct list{
char names[20][20];
int prices[20];
int Num_Of_Merchandise;
};
我做一個結構和初始化它的陣列和整數,然後我把它寫入一個文件。從那以後,我再次讀取結構做出了一些更改:
list new_list;
ifstream ml("Desktop:\\Mlist.dat", ios::in | ios::binary);
if(ml){
ml.read(reinterpret_cast<char*>(&new_list),sizeof(new_list));
}
int m,i;
cout<<"1-add\n2-remove\n";
cin>>m;
if(m==1){
cout<< "enter the name of new merchandise:\n";
cin>>new_list.names[new_list.Num_Of_Merchandise];
cout<< "enter the price of new merchandise:\n";
int newPrice;
cin>>newPrice;
new_list.prices[new_list.Num_Of_Merchandise]=newPrice;
new_list.Num_Of_Merchandise++;
}
但是當我在另一個程序(更改後)讀取文件,它給分段錯誤。爲什麼?我究竟做錯了什麼?
所以這是值得一提的我們需要看到代碼也寫出來。我懷疑編譯器正在做一些魔術來使你的數組陣列起作用。此外,您不確定文件中的二進制數據是否與結構的佈局和位數相匹配。 – Mgetz
我可以建議你看看boost :: serialization? – UKMonkey
另外,請考慮使用Google Protobuf – alexeykuzmin0