Potresti usare la getchar e la realloc per cambiare in continuazione le dimensioni della stringa.Io a mio tempo avevo fatto una funzione del genere:

http://forum.html.it/forum/showthrea...readid=1435903

Però dopo tanta pratica sono arrivato alla conclusione che la soluzione migliore è usare un buffer di dimensioni fisse:

codice:
void input(char** buffer)
{
    char temp[1000];
    fgets(temp,1000,stdin);
    *buffer=(char*)malloc( (strlen(temp)+1) *sizeof(char) );
    strcpy(*buffer,temp);
}
Perchè anche la realloc provoca una chiamata di sistema e non è il massimo della velocità.
Però come esercizio sarebbe bello da fare.