2013-04-11 110 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