使用fread与std :: vector时出错

时间:2012-10-17 12:48:44

标签: file vector error-handling fread

第一次执行成功没有任何错误,但是当它创建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;
    }
}

1 个答案:

答案 0 :(得分:1)

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