Molto interessante il metodo del link sopra.

Per ora ho fatto come ha consigliato murder eyes, ma è sbucato un problema.
Dopo che ho contato le righe vado ad allocare con
codice:
mat = (char **) malloc (num_righe * sizeof (char *));
Controllo che la malloc non ritorni NULL e poi gli dico di andare a prendere la prima riga del file in questo modo
codice:
while (fscanf (fp, "%s", stringa) != EOF)
E qua casca l'asino (cioè io ) dato che non entra nel while, come se fosse arrivato a EOF, passa oltre.

Perchè?