C++ C++;在结构上使用指针并将其保存在文件中

C++ C++;在结构上使用指针并将其保存在文件中,c++,file,pointers,struct,C++,File,Pointers,Struct,所以我有一个问题,我目前使用的结构上的指针,并保存在一个文件的值 struct compracli{ char nomeartigo[50]; char codigo[50]; char nomecli[50]; char data[50]; }; int compra(int l){ compracli *ptr, d; FILE *arquivo; ptr = &d; if((arquivo

所以我有一个问题,我目前使用的结构上的指针,并保存在一个文件的值

        struct compracli{
        char nomeartigo[50];
        char codigo[50];
        char nomecli[50];
        char data[50];
    };

int compra(int l){
compracli *ptr, d;
FILE *arquivo;
ptr = &d;

if((arquivo = fopen("compras.dat", "rb+")) !=NULL){
            //Colocar apontadores dentro dos arquivos
            system("CLS");
            cout<<"Adicinar um pedido de compra!"<<endl;
            cin.sync();
            cout<<"Adicione o nome do artigo: ";
            cin >> (*ptr).nomeartigo;
            fwrite(ptr->nomeartigo, sizeof(ptr->nomeartigo), 1, arquivo);
            cin.sync();
            cout<<"Adicione o codigo do artigo: ";
            cin >> (*ptr).codigo;
            fwrite(ptr->codigo, sizeof(ptr->codigo), 2, arquivo);
            cin.sync();
            cout<<"Adicione o nome do cliente: ";
            cin >> (*ptr).nomecli;
            fwrite(ptr->nomecli, sizeof(ptr->nomecli), 3, arquivo);
            cin.sync();
            cout<<"Adicione a data de encomenda: ";
            cin >> (*ptr).data;
            fwrite(ptr->data, sizeof(ptr->data), 4, arquivo);
            cin.sync();

            }else{
                cout<<"Erro na base de dados, de momento nao poderá aceder, tente mais tarde"<<endl;
             }
             fclose(arquivo);



  return 0;
struct compacli{
char nomeartigo[50];
char-codigo[50];
char-nomecli[50];
字符数据[50];
};
内部压缩(内部l){
compracli*ptr,d;
档案*arquivo;
ptr=&d;
如果((arquivo=fopen(“压缩数据”、“rb+”)!=NULL){
//多斯阿奎沃斯科罗卡·阿潘塔多雷斯酒店
系统(“CLS”);
coutcodigo),2,arquivo);
cin.sync();
cout(*ptr).nomecli;
fwrite(ptr->nomecli,sizeof(ptr->nomecli),3,arquivo;
cin.sync();
cout(*ptr)。数据;
fwrite(ptr->data,sizeof(ptr->data),4,arquivo;
cin.sync();
}否则{
库特
nomeartigo
是一个
char
数组。它写入数组中的所有字节,包括
operator>
放在那里的尾随
\0
字节,以及随后的任何未初始化数据。这可能是错误的,也可能不是错误的。这取决于您如何读回,但您没有显示此代码

fwrite(ptr->codigo, sizeof(ptr->codigo), 2, arquivo);
这和其余的写入显然是错误的

这将写入
sizeof(ptr->codigo)*2个字节。这显然不是您想要的。这里只有
sizeof(ptr->codigo)
字节可写入

所有的
fwrite
(),除了第一个写得太多。
fwrite()
的第三个参数不是某种行号


另外,由于这是C++,所以不应该使用<代码>文件>::fStuts。此外,<代码>操作符> <代码>在<代码> char < /C>数组中不受限制,并且易受缓冲区溢出的影响。< /p>为什么这个标记的C?你能解释一下你认为这个代码是做什么的吗?例如,我看到<代码> 1 < /COD>代码>2
3
4
,在写入
fwrite
的第三个参数中,我不知道这是为什么,也不知道您试图用它做什么。@DavidSchwartz这种写入文件的方式来自C!这就是我标记C的原因。第三个参数应该是我建议的值写入文件的行数你用
std::endl;
结束每一行
std::cout
谢谢!因为我快到最后期限了,我不再使用c方式,而是开始使用fstream!
fwrite(ptr->codigo, sizeof(ptr->codigo), 2, arquivo);