【发布时间】:2018-03-24 17:40:08
【问题描述】:
我有一个用malloc 分配的嵌套结构指针数组。我想在二进制文件中打印数组,然后将它加载到这个结构中,再次粉碎现有记录。这是我的结构数组:
struct viaje {
char *identificador;
char *ciudadDestino;
char *hotel;
int numeroNoches;
char *tipoTransporte;
float precioAlojamiento;
float precioDesplazamiento;
};
struct cliente {
char *dni;
char *nombre;
char *apellidos;
char *direccion;
int totalViajes;
struct viaje *viajes;
} *clientes;
我正在尝试将其打印在二进制文件中,例如:
for (i = 0; i < MAX_TAM_CLIENTES; i++) {
fwrite(&clientes[i], sizeof(struct cliente)-(sizeof(struct viaje)*MAX_TAM_VIAJES_CLIENTE), 1, fp_guardarCargarEstado);
for (j = 0; j < clientes[i].totalViajes; j++) {
fwrite(&clientes[i].viajes[j], sizeof(struct viaje), 1, fp_guardarCargarEstado);
}
}
地点:
MAX_TAM_CLIENTES 是一个定义。数组clientes 的最大大小是多少,MAX_TAM_VIAJES_CLIENTE 是一个定义。一个客户端中数组viajes的最大大小是多少
另外,我尝试像这样加载这个二进制数据:
for (i = 0; i < MAX_TAM_CLIENTES; i++) {
clientes = (struct cliente *)realloc(clientes, (totalClientes+1)*sizeof(struct cliente));
clientes[totalClientes].dni = (char *)malloc((MAX_TAM_DNI+1)*sizeof(char));
clientes[totalClientes].nombre = (char *)malloc((MAX_TAM_NOMBRE+1)*sizeof(char));
clientes[totalClientes].apellidos = (char *)malloc((MAX_TAM_APELLIDOS+1)*sizeof(char));
clientes[totalClientes].direccion = (char *)malloc((MAX_TAM_DIRECCION+1)*sizeof(char));
fread(&clientes[i], sizeof(struct cliente)-(sizeof(struct viaje)*MAX_TAM_VIAJES_CLIENTE), 1, fp_guardarCargarEstado);
for (j = 0; j < clientes[i].totalViajes; j++) {
clientes[i].viajes = (struct viaje *)realloc(clientes[i].viajes, (j+1)*sizeof(struct viaje));
clientes[i].viajes[j].identificador = (char *)malloc((MAX_TAM_IDENTIFICADOR+1)*sizeof(char));
clientes[i].viajes[j].ciudadDestino = (char *)malloc((MAX_TAM_CIUDAD_DESTINO+1)*sizeof(char));
clientes[i].viajes[j].hotel = (char *)malloc((MAX_TAM_HOTEL+1)*sizeof(char));
clientes[i].viajes[j].tipoTransporte = (char *)malloc((MAX_TAM_TIPO_TRANSPORTE+1)*sizeof(char));
fread(&clientes[i].viajes[j], sizeof(struct viaje), 1, fp_guardarCargarEstado);
}
}
地点:
MAX_TAM_* 是定义的。它们是每个字段的最大大小。
但我不知道fwrite 是否保存好数据,因为当我尝试加载它时,程序崩溃并且没有加载数据。
我不知道那里怎么可能出错。有什么想法吗?
谢谢。
【问题讨论】:
-
“Anidated”不是我知道的英文单词(但我不是母语人士)。西班牙语的一种翻译似乎是“嵌套的”。你是这个意思吗?很抱歉没有帮助解决实际问题。
-
是的,没错。我想说嵌套,问题的标题已经修改。非常感谢。没问题,不要担心问题:)
-
提示:最好使用像
int32_t这样的固定宽度类型而不是int来保存整数。 -
好的,我会注意的,谢谢
标签: c struct malloc fwrite fread