2013-04-10 71 views
-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; 
} 
+0

編譯時是否啓用了警告和調試信息? (即用'gcc -Wall -g'編譯,然後改進直到沒有給出警告爲止)。然後,學習如何使用調試器'gdb'並逐步使用它。另外,檢查'fread'的結果,並在每個循環的'fread'之前清除讀取的數據。 – 2013-04-10 05:19:44

+0

任何人應該知道,.dat文件中有什麼[即使在不太可能的情況下,它有一些有效的數據],你正在嘗試閱讀? – 2013-04-10 05:21:24

+0

@BarathBushan:這個代碼是寫和讀文件的......所以我們知道寫什麼。 – 2013-04-10 05:22:58

回答

2

在功能nuevo_evento(),您發佈的latest program的,只是改變

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

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

如果你看一下,在fwrite()功能,第一個參數是指針到數據。 在你的程序中,&event是指針本身的地址,但event是它所指向的結構的地址,這就是你必須使用fwrite()的地址。

也看看這個question,它會幫助你面對的問題。

相關問題