Buongiorno a tutti,

Nel caso in cui abbia bisogno di leggere da file una stringa che porrò in un array? Ovviamente a priori non so quanto sarà lunga la stringa, dunque serve malloc perchè non so quanto sarà grande l'array.

Il file ha una struttura del genere:

-2.5 nome1 nome2
-3 nome1 nome2
1.3 nome1 nome2

Se dichiaro un array statico il tutto è molto semplice:

codice:
struct tipo_dato
{
       float dati.temp;
       char dati.nome1[50];
       char dati.nome2[50];
}
struct tipo_dato dati[365];

while (!(feof(f)))
{
        fscanf(f, "%lf %s %s", &dati.temp, dati.nome1, dati.nome2);
}
Ma come faccio una corretta malloc su questa struttura? Non solo non conosco la lunghezza delle stringhe nome1 e nome2 ma non so quanti record di dati immagazzinerò...ho ipotizzato rispettivamente 50, 50 e 365 (essendo dati riferiti ai giorni dell'anno).

Come mi è stato suggerito da torn24, mi verrebbe da provare qualcosa tipo:

codice:
char *nome1;
char *nome2;

struct tipo_dato
{
       float dati.temp;
       char dati.nome1[50];
       char dati.nome2[50];
}
struct tipo_dato *dati;
Ma poi come sarà il codice con malloc e la fscanf?
Chiedessi all'utente quanto sarà grande la stringa (dim), farei:
nome1=(char *)malloc(sizeof(char)*dim);
Ma qui ho stringhe lette da file, non so quant'è dim.
Una cosa del genere secondo me non va bene..
nome1=(char *) malloc(sizeof(char) * (strlen(fscanf(f,"%s %s", &nome1,)));

Aggiungo che, una volta conosciute le stringhe nome1 e nome2, avranno poi sempre la stessa lunghezza per l'intero file letto. A quel punto ciò che non so è quanti record ha il file e quindi quante righe ha la matrice *dati.

Grazie mille per l'aiuto.