Il problema è che la fgets() scrive la stringa che viene presa in input nel buffer. Per forza di cose devi "dirgli" una dimensione massima entro la quale non si sfora la lunghezza del buffer.
L' alternativa sarebbe quella di leggere la stringa carattere per carattere con la getchar(), allocando un carattere alla volta (oppure raddoppiando la dimensione del buffer ogni volta che serve più spazio), però se chiami troppe volte la realloc() può essere inefficiente.

Rispondi quotando