2013-04-11 75 views
0

我正在用C編寫程序,並嘗試將結構數組保存到文件中。 我的意圖是初始化一個結構數組並將其保存到一個文件中。此外,我想修改struct-entry 1,struct-entry 2,struct-entry 3等的條目,但條目不會寫入文件。甚至似乎沒有任何結構的數組。在C中的文件結構數組中寫入條目C

我將不勝感激任何幫助,因爲我想不通,爲什麼數組沒有寫入文件。

謝謝 Threx

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 

struct liste { 
    unsigned int code; 
    unsigned int activ; 
    }; 
int main() 
{ 
int z; 

printf("Enter Index: "); /* Data should fill the z-th entry in array of structures */ 
scanf("%d",&z); 

FILE *mrp; 
struct liste bauteil[5]; /* Array with 5 structs for 5 different entries */ 

mrp = fopen("aaa.txt","w+b"); 

printf("Number of entry is: %d\n",z); 
printf("Enter code: "); 
scanf("%d",&bauteil[z].code); 
bauteil[z].activ=77777; /* activ entry contains 77777 */ 

fseek(mrp, z * sizeof(struct liste), SEEK_SET); 
fwrite(&bauteil[],sizeof(bauteil),1,mrp); 

fclose(mrp); 
return 0; 
} 
+1

是否該文件已經存在,你的程序開始前?或者你的程序應該在填寫條目時創建文件? – 2013-04-11 19:53:25

+3

'fwrite(&bauteil [],sizeof(bauteil),1,mrp);'甚至沒有編譯。這是一個複製錯誤? (它應該是'fwrite(&bauteil [z],sizeof(bauteil),1,mrp);'要編譯,但實際大小參數應該是'sizeof bauteil [0]')。 – 2013-04-11 19:53:59

+0

@Scott:在填充它之前應該存在該文件,並且稍後必須填寫/修改struct-entries(例如,使用bauteil [2] .code = 123)。 – Threx 2013-04-11 20:19:45

回答

0

看那fwrite的參數。要編寫整個數組,您要編寫由bauteil指向的5個結構。嘗試fwrite(bauteil,sizeof(struct liste),5,mrp);由於sizeof(bauteil)不會返回整個數組的大小,因此當前寫入過短。

+0

我修改了fwrite。你的建議似乎是必要的,並且是朝着正確的方向邁進,但我仍然無法訪問陣列。相反,arry將被填充隨機值,並且我無法輸入它們...... – Threx 2013-04-11 20:33:02

+0

由於大多數條目從不寫入,因此預計大部分輸出當前都是隨機值。當您查看文件時,不要期望以ascii格式查看數字,因爲您將它們編寫爲二進制表示。 – Voider 2013-04-11 20:51:14

+0

我嘗試直接讀取它們而不是.txt文件。相反,我使用printf。這工作,直到6入境後的txt文件被寵壞了以外的恢復。這是firt 5條目可以修改和閱讀就好了......怪異! – Threx 2013-04-11 23:45:12

0

mrp = fopen("aaa.txt","r+b"); 
fwrite(&bauteil[z],sizeof(struct liste),1,mrp); 
+0

不是sizeof(結構監聽)覆蓋孔結構數組?如果發生這種情況,所有最後豁免的參賽作品都將被渲染,不是嗎?我的測試顯示,這是這樣的... – Threx 2013-04-11 23:46:34

+0

@Threx我認爲我們可以重寫只有一個的記錄。 – BLUEPIXY 2013-04-12 00:12:28