Viernes 8 de Noviembre de 2024, 16:52
SoloCodigo
Bienvenido(a),
Visitante
. Por favor,
ingresa
o
regístrate
.
¿Perdiste tu
email de activación?
Inicio
Foros
Chat
Ayuda
Buscar
Ingresar
Registrarse
SoloCodigo
»
Foros
»
Programación General
»
C/C++
(Moderador:
Eternal Idol
) »
Lectura De Estructuras De Archivo Binario
« anterior
próximo »
Imprimir
Páginas: [
1
]
Autor
Tema: Lectura De Estructuras De Archivo Binario (Leído 2407 veces)
telecoAST
Nuevo Miembro
Mensajes: 4
Lectura De Estructuras De Archivo Binario
«
en:
Lunes 19 de Mayo de 2008, 15:53 »
0
Hola, antes que nada quisiera presentarme. Me llamo Antonio, soy un estudiante de Telecomunicaciones que está realizando su proyecto fin de carrera. Un saludo a todos.
Ahora viene mi cuestion. Pues resulta que tengo que trabajar con un fichero binario en el cual tengo que almacenar una serie de estructuras. El problema lo tengo en la lectura, ya que a priori no se que tipo de estructuras tengo que leer(digamos que en la escritura del fichero no siempre es igual, y dependiendo de diversas variables, puedo escribir estructuras distintas en numero y tipo). Lo que tenia pensado era, antes de mandar las estructuras, hacerme un vector donde indicara el tamaño de cada una y luego leerla en un vector de punteros a void.
void * estructuras;
int * tamEstruct;
...
// Leemos el vector q contiene el tamaño de cada una de las estuct. a leer
for(i=0;i<numBloques;i++)
fread ((tamEstruct+i), sizeof(int), 1, fich);
// Quinto parametro a leer = Estructuras
for(i=0;i<numBloques;i++)
fread ((estructuras+i), *(tamEstruct+i), 1, fich); <<<< error
>>>>> "ficheros.c", line 250: error: expression must be a pointer to a complete object type
No se si me habre explicado bien, pero espero que me pregunteis si no queda claro y yo poco a poco intente explicarlo mejor, y haber si puedo resolver este problema. Os estare eternamente agradecido por vuestra ayuda.
Tweet
carmamezo
Miembro MUY activo
Mensajes: 232
Re: Lectura De Estructuras De Archivo Binario
«
Respuesta #1 en:
Lunes 19 de Mayo de 2008, 16:21 »
0
Hola,
si tienes claro los tipos de estructuras con los que cuentas (siempre vas a escribir tres tipos de estructuras distintas, por ejemplo) puedes hacer una reserva dinámica de memoria siguiendo el método que antes exponías...
Por ejemplo...
en la cabezera dice que tienes 10 estructuras de tipo 1, 4 de tipo 2, 3 de tipo 3 y 9 de tipo 2...
Pues nada, reservas memoria con un malloc y creas espacio para contener una estructura de tipo 1, lees las 10 estructuras una tras otra, luego haces un realloc o un free y un nuevo malloc con un espacio para estructuras de tipo 2, lees las 4 estructuras y de nuevo haces una nueva reserva... Así sucesivamente.
El problema que tienes es que tu apuntador a void, simplemente puede apuntar a cualquier sitio de memoria, pero no has reservado memoria para contener nada, por tanto fread no te puede devolver la estructura porque no has definido espacio para contenerla, dado que a priori no conoces cuánto va a ocupar debes usar memoria dinámica.
Un saludo,
No hay tonto más molesto que el ingenioso.
telecoAST
Nuevo Miembro
Mensajes: 4
Re: Lectura De Estructuras De Archivo Binario
«
Respuesta #2 en:
Lunes 19 de Mayo de 2008, 16:50 »
0
Hola,
lo de que si se el tipo de estructura y numero de ellas si que tengo claro como se hace
estruct=(void *)malloc(sizeof(struct s_sos));
fread ((struct s_sos *)estruct, sizeof(struct s_sos), 1, fich);
Este trozo de codigo es de una prueba que hice. El problema que tengo reside precisamente en que no se de que tipo son las estructuras que leo. El numero de ellas si lo se, ademas tambien se el tamaño de cada una de ellas (antes de leer las estructuras leo un vector el cual incluye los tamaños de todas:
tamEstruct[0]=sizeof(struct left);
tamEstruct[1]=sizeof(struct proc1);
tamEstruct[2]=sizeof(struct proc1);
tamEstruct[3]=sizeof(struct combinador);
fwrite(&tamEstruct[0], sizeof(struct left), 1, fich1);
fwrite(&tamEstruct[1], sizeof(struct proc1), 1, fich1);
fwrite(&tamEstruct[2], sizeof(struct proc1), 1, fich1);
fwrite(&tamEstruct[3], sizeof(struct combinador), 1, fich1); )
Para leer deberia hacer entonces segun me dices de reservar memoria algo parecido a:
for(i=0;i<numBloques;i++){
*(estructuras+i)=malloc(*(tamEstruct+i)); // Aqui es cuando reservo la memoria
fread (*(estructuras+i), *(tamEstruct+i), 1, fich);
}
No?
telecoAST
Nuevo Miembro
Mensajes: 4
Re: Lectura De Estructuras De Archivo Binario
«
Respuesta #3 en:
Lunes 19 de Mayo de 2008, 16:56 »
0
Ok, todo resuelto, el codigo que he posteado antes sería correcto declarando:
void ** estructuras;
Asi estructuras seria un puntero que apunta al comiendo de un vector que contiene punteros a void (los cuales tienen reservada la memoria correspondiente a su estructura, sin saber exactamente cual es).
Muchas gracias, cuando me has dicho lo de reserva de memoria dinamica me as conducido a observar el error, muchas gracias.
carmamezo
Miembro MUY activo
Mensajes: 232
Re: Lectura De Estructuras De Archivo Binario
«
Respuesta #4 en:
Lunes 19 de Mayo de 2008, 18:11 »
0
de nada, me alegro que hayas llegado a la solución
Un saludo,
No hay tonto más molesto que el ingenioso.
Imprimir
Páginas: [
1
]
« anterior
próximo »
SoloCodigo
»
Foros
»
Programación General
»
C/C++
(Moderador:
Eternal Idol
) »
Lectura De Estructuras De Archivo Binario