在下面发布的代码中,从文件中写入和读取结构时会出现问题。输出结果是垃圾数据,我无法自己找到解决方案。使用的操作系统: Ubuntu 。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct eventos {
int id;
char titl[60];
char desc[120];
int estado;
} evento;
struct eventos y;
void nuevo_evento(struct eventos *event){
FILE *eve;
eve = fopen("Eventos.dat","ab+");
fwrite(&event,sizeof(struct eventos),1,eve);
fclose(eve);
}
void VerEventos(){
FILE *events2 = fopen("Eventos.dat", "rb+");
printf("------------------------------\n");
fread(&y, sizeof(struct eventos), 1, events2);
while(!feof(events2)){
printf("%d %s %d %s\n", y.id, y.titl, y.estado, y.desc);
fread(&y, sizeof(struct eventos), 1, events2);
}
printf("------------------------------\n");
fclose(events2);
}
int main(){
remove("Eventos.dat");
y.id = 1;
y.estado = 0;
strcpy(y.titl,"Evento1");
strcpy(y.desc,"evento culiao");
nuevo_evento(&y);
y.id = 2;
y.estado = 0;
strcpy(y.titl,"Evento2");
strcpy(y.desc,"evento bacan");
nuevo_evento(&y);
VerEventos();
return 0;
}
答案 0 :(得分:2)
在您发布的latest program的函数nuevo_evento()
中,只需更改
fwrite(&event,sizeof(struct eventos),1,eve);
到
fwrite(event,sizeof(struct eventos),1,eve);
如果查看fwrite()函数,第一个参数是指向数据的指针。
在你的程序中,&event
是指针本身的地址,但是event
是它指向的结构的地址,这就是你必须使用fwrite()。
另请查看此question,它将对您遇到的问题有所帮助。