我有一个文件,我想从中读取之前由另一个程序创建的数据,但是我收到了分段错误错误。这是程序。
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;
}
感谢您的时间。如果有人需要更多信息,请告诉我。
答案 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都会使代码复杂得多 必要。只需用适当的方法定义一个结构 每个字段(或字段组)的实例数