Il file è di testo vero?
Date le dimensioni del file la cosa si complica non poco....
La cosa più banale è creare un contatore e prima contare quanti caratteri ci sono, poi allocare la memoria e riempirla, facendo tipo:

codice:
int count = 0, i = 0;
char temp;
char* v;

while ((fscanf (f, "%c", &temp)) == 1)
        count++;

rewind (f);

v = (char*) malloc (count*sizeof(char));
while ((fscanf (f, "%c", &v[i])) == 1)
       i++;
Altrimenti ti crei dinamicamente un array di caratteri e man mano che lo vai a riempire controlli sempre che l'indici attuale superi la dimensione prefissata.... Quando ciò avviene, allochi un array più grande, copi il contenuto di quello vecchio in quello nuovo, cancelli quello vecchio e prosegui sempre in questo modo!