在C上将数据从文件写入结构

时间:2014-12-27 21:55:07

标签: c file struct fwrite fread

我有一个文件,我想从中读取之前由另一个程序创建的数据,但是我收到了分段错误错误。这是程序。

typedef char Telemento[MAX_CHAR+5];

typedef struct{
   Telemento arraycola[NUM_ELEM];
   int inicio;
   int final;
}TCola;

typedef char TNombreImpresora[MAX_NOM_IMPR];

typedef struct{
   TNombreImpresora nombreimpresora;
   int numerodeficherosencola;
   TCola colaImpresora;
}TImpresora;

typedef struct{
   TImpresora impresora;
   int ocupado;
}TCelda;

typedef TCelda Tlistaimpresora[MAX_IMPR];



int main(){
    FILE *fp;
    int i=0;
    Tlistaimpresora listaimpresoras;



    fp=fopen("test.bin", "r");

    while(feof(fp)==0 && i<4){
       fread(&listaimpresoras[i].impresora, sizeof(listaimpresoras[i].impresora), (i+1), fp);
       listaimpresoras[i].ocupado=1;
       i++;
    }
    fclose(fp);


    return 0;   
}

感谢您的时间。如果有人需要更多信息,请告诉我。

4 个答案:

答案 0 :(得分:3)

我认为此行有错误(应为1,而不是i+1):

fread(&listaimpresoras[i].impresora, sizeof(listaimpresoras[i].impresora), 1, fp);

答案 1 :(得分:3)

只需更改此

fread(&listaimpresoras[i].impresora, sizeof(listaimpresoras[i].impresora), (i+1), fp);

用这个

fread(&listaimpresoras[i].impresora, sizeof(listaimpresoras[i].impresora), 1, fp);

您不是在阅读i + 1项,只是1

答案 2 :(得分:0)

(i+1)替换为1来电中的fread

也将[1]更改为[i]

你发生的事情是每次读取越来越大,最后一次读取溢出数组。

你想要的是每个读取相同大小到不同的数组元素。

答案 3 :(得分:0)

这一行:

fread(&listaimpresoras[i].impresora, sizeof(listaimpresoras[i].impresora), (i+1), fp);
由于以下几个原因,

有点奇怪:

1)你唯一阅读结构的一个实例

2)实际sizeof应该是struct的大小,而不是某些数组条目的大小。

建议:

fread(&listaimpresoras[i].impresora, sizeof(Tlistaimpresora), 1, fp);

此外,凌乱的typedef声明使代码非常模糊 所有这些typedef都会使代码复杂得多 必要。只需用适当的方法定义一个结构 每个字段(或字段组)的实例数