Fai che metti una stringa lunga (ad esempio) 100 caratteri, la prendi in input con fgets, la copi su un' area di memoria allocata dinamicamente e la ritorni.
Per esempio puoi fare così:
codice:
char* get_string(void)
{
char buffer[100], *result;
fgets(buffer,100,stdin);
result=(char*)malloc( (strlen(buffer)+1)* sizeof(char));
return result;
}
Una variante consiste nel prende in input direttamente la stringa allocata dinamicamente, ma allocando tot caratteri alla volta (ad esempio 10) e riallocandola solo quando supera le dimensioni dell' input, ma di tot caratteri alla volta pe limitare le chiamate alla realloc:
codice:
char* get_string(void)
{
char* result=(char*)malloc(10*sizeof(char)),temp,length=0,dim=10;
while( (temp=getchar())!=10)
{
length++;
if(dim<length)
{
dim+=10;
result=(char*)realloc(dim*sizeof(char));
}
result[length-1]=temp;
}
return result;
}
Poi ci sono mille varianti, e dipende sostanzialmente da:
-Quanta memoria vuoi occupare al massimo;
-Quanto vuoi che la routine sia veloce.
Scegli te l' importanza di questi fattori.
PS: Ci potrebbe essere qualche errore perché le ho scritte senza provare a compilarle.