将结构写入二进制文件并读取它

时间:2017-01-27 14:56:29

标签: c++ file struct

我正在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++;
}

但是当我在另一个程序中读取文件时(更改后),它会给出分段错误。为什么?我做错了什么?

1 个答案:

答案 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)