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()代わりに、文字列の動的サイズを返すを使用する必要があります。

于 2012-10-17T13:09:30.913 に答える