2014-03-18 51 views
0
typedef struct 
{ 
    char*title; 
    char* year; 
    char* length; //in minutes 
} record; 

void write(record* list[]) 
{ 
    FILE* out=fopen("output.bin","a"); 
    if(!out) 
    { 
     printf("error"); exit(1); 
    }else 
    { 
     int i; 
     for (i = 0; i < 1024; i++) 
     { 
      if(list[i]!=NULL) 
       fwrite(list[i], sizeof(record), 1, out); 
     } 
     fclose(out); 
    } 
} 
void read_back() 
{ 
    FILE* input=fopen("output.bin","r"); 
    if(!input) 
    { 
     printf("error"); exit(1); 
    }else 
    { 
     record* temp[1024]; 
     fread(temp,sizeof(record)*1024,1,input); 


     fclose(input); 
    } 

} 

如何使用fread讀取二進制文件?任何人都可以檢查我是否正確使用fwrite?我想我的read_back方法打印結構中的內容(標題,年份等)。如何使用fread讀取二進制文件?

+0

在你的'read_back'函數中,你必須使用'malloc'函數爲每條記錄分配內存空間。順便說一句,你可能應該打開「w」(寫)而不是「a」(追加)。在某些環境中(例如Windows),您需要使用「rb」和「wb」而不是「r」和「w」來打開二進制文件。 –

回答

1

record結構元素定義爲pointer s。 fread不能隱含地分配這些指針。對於record結構中的每個元素,應該明確地讀取這些值,並且在通過malloc分配內存後分配相關值。

fwrite只會寫內存以這種方式進入存儲器地址,因爲什麼record結構只有指針內。

有兩個選項

定義靜態數組定義如下面

typedef struct 
{ 
    char title[256]; 
    char year[4]; 
    char length[8]; //in minutes 
} record; 

寫入record結構元件一個接一個通過與他們的引用。

相關問題