我正在Linux中编写一个c ++程序,其中我有一个名为list的结构:
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++;
}
但是当我在另一个程序中读取文件时(更改后),它会给出分段错误。为什么?我做错了什么?
答案 0 :(得分:0)
但是当我在另一个程序中读取文件时(更改后),它会给出分段错误。
您的示例代码仅显示阅读,没有写作 - 因此您的中间人不会持久化。
如果您还有编写代码,那么在没有看到another program
代码的情况下很难说清楚。如果您遵守其文件格式的规范,那么我只能建议确保对齐不是问题,为此,添加#pragma pack
,它将同时适用于MSVC和gcc:
#pragma pack(push)
#pragma pack(1)
struct list{
char names[20][20];
int prices[20];
int Num_Of_Merchandise;
};
#pragma pack(pop)