读取和打印文件时接收垃圾数据

时间:2013-04-10 05:17:31

标签: c garbage

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

1 个答案:

答案 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,它将对您遇到的问题有所帮助。