Quote Originariamente inviata da filips Visualizza il messaggio
Non credo di aver capito appieno il discorso su ctrl-D/Z e la terminazione. Per es. da stdin non basta premere Enter per terminare e inserire la linea di input? Quella combinazione di tasti
non dà forse un EOF? Cosa c'entra EOF? Praticamente stai dicendo che tutti i caratteri inseriti ci sono stati, a parte EOF (successivo a Enter?)?
No, ENTER genera un '\n'.
Tra l'altro EOF non è un carattere ma una condizione, ossia, quando si legge oltre la fine del file.
Ti sembrerà strano ma ha senso parlare di EOF anche quindo l'input è da tastiera.

Semplicemente fgets smette di leggere solo in due casi: quando incontra '\n' o si ha la condizione di EOF.
In tutti i due casi il buffer conterrà sempre il carattere NULL e se c'è spazio e la condizione non è di EOF ci sara anche il '\n'. Tutto questo è scritto nelle specifiche di fgets.