1

第一次执行成功,没有任何错误,但是当它创建Data.bin时,我在使用fread. 对不起,我不知道怎么问,所以请看程序。我评论了错误声明。

#include<iostream>
#include<vector>
using namespace std;

typedef struct myStuff
{
    int cdno;
    string content,des;
}MS;

int main()
{
    vector<MS> data;
    int i=0;
    string in;
    FILE *fr=NULL,*fw=NULL;
    fr=fopen("Data.bin","rb");


    //----------------------------------------------------------------------
    if(fr!=NULL)
    {
        do
        {
            data.resize(++i);
        }while( fread(&data[i-1],sizeof(MS),1,fr) ); //ERROR
        fclose(fr);
    }
    else
        data.resize(++i);

    //----------------------------------------------------------------------
    while(1)
    {
        cout<<"Enter x to exit or c to continue updating data: ";
        cin>>in;
        if(in=="x"||in=="X")
        {
            fw=fopen("Data.bin","wb");
            fwrite(&data[i],sizeof(MS),i,fw);
            fclose(fw);
            exit(0);
        }
        else if(in=="c"||in=="C")
        {
            cout<<"Enter CD no: ";
            cin>>data[i-1].cdno;
            cout<<"Enter Contents: ";
            cin>>data[i-1].content;
            cout<<"Enter Description: ";
            cin>>data[i-1].des;
            data.resize(++i);
        }
        else
            cout<<"Try Again..."<<endl;
    }
}
4

1 回答 1

1

您不应该使用sizeof(string)或 sizeof 包含字符串的结构,这是没有意义的,它只会为您提供类字符串的编译时间(静态)大小。您应该改用string.size()which 返回字符串的动态大小。

于 2012-10-17T13:09:30.913 回答