L' ho trasformata in una funzione per ottenere stringhe senza sapere la dimensione a priori,da stdin o da file:
codice:
char* get_string(FILE *fp,char*ptr)
{
    ptr=(char*)malloc(sizeof(char));
    int i=1;
    char ci;
    fflush(stdin);
    while(ci!=10)
    {
        ci=fgetc(fp);
        if(ci!=10)
          ptr[i-1]=ci;
        else
          ptr[i-1]='\0';
        ptr=(char*)realloc(ptr,(i+1)*sizeof(char));
        i++;
    }
    fflush(stdin);
    return ptr;
}
L' intento è di usarla durante un mio programma,dove ad esempio faccio:
codice:
char *p;
p=get_string(stdin,p);
/*faccio quello che devo fare*/
free(p);
La uso al posto di ogni funzione di lettura da input.

P.S.: ma se io sono sicuro che la memoria verrà allocata,per convenzione devo comunque verificare che non punti a NULL?
In genere me la realloca sempre,in che casi può fallire?