Ma i dati li salvi in binario o in ascii ?
Da come hai scritto il codice sembra la seconda.. ma per me complichi solo la faccenda, facendo tutto in binario:
typedef struct {
double volume, peso;
unsigned char colore[3];
} OGGETTO;
int main (void)
{
FILE *fd;
int cnt_obj, i;
OGGETTO *objs = NULL;
if ( !(fd = fopen ("file.txt", "rb")) )
exit (EXIT_FAILURE);
fread (&cnt_obj, sizeof (int), 1, fd);
objs = (OGGETTO *) malloc (cnt_obj * sizeof (OGGETTO));
for ( i = 0; i < cnt_obj; i++ ) {
fread (&(objs[i].volume), sizeof (double), 1, fd);
fread (&(objs[i].peso), sizeof (double), 1, fd);
fread (objs[i].colore, sizeof (char), 3, fd);
}
fclose (fd);
/* In `objs' hai tutti gli oggetti da 0 a cnt_obj - 1 */
return 0;
}