-3

在下面发布的代码中,从文件中写入和读取结构时出现问题。输出结果是垃圾数据,我自己无法找到解决方案。使用的操作系统: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;
}
4

1 回答 1

2

在您发布nuevo_evento()最新程序的功能中,只需更改

fwrite(&event,sizeof(struct eventos),1,eve);

fwrite(event,sizeof(struct eventos),1,eve);

如果您查看fwrite()函数,第一个参数是指向数据的指针。在你的程序中,&event是指针本身的地址,但是event是它指向的结构的地址,这就是你必须使用 fwrite() 的地址。

也看看这个问题,这将对您面临的问题有所帮助。

于 2013-04-10T06:17:20.857 回答