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);