M2: "Quando premi il backspace il CARATTERE corrispondente viene AGGIUNTO al flusso (cioè allo stream, cioè al file) e quindi DENTRO IL PROGRAMMA ti troverai, con la fgets, il carattere DENTRO la stringa ritornata.
Ciò accade anche per altri casi (meno frequenti).
Comunque il sunto è: mentre la CONSOLE fa tante belle cose (il cursore si sposta, i caratteri si cancellano eccetera), se usi funzioni PER STREAM otterrai tutto quanto, compresa la "spazzatura", nella stringa risultante."
No, fermo un momento! Vediamo se ho capito.
Dunque premo in ordine "P", "i", "p", "p", "o", backspace, "i" e "invio", come ho scritto nella risposta precedente. Da quel che MI SEMBRA DI CAPIRE dalla citazione, nello stream si finirebbe per avere la sequenza 'P', 'i', 'p', 'p', 'o', 8, 'i', '\n'. Com'è che in uscita fgets() mi dà "Pippo\n"? 8 e 'i' che fine hanno fatto?
Forse l'errore concettuale che faccio è immaginare che i dati vengano mantenuti nello stream sotto forma di array di caratteri e non è così?
Oppure fgets() "ricostruisce" la sequenza dei comandi e mi mette nel buffer i caratteri che risultano dal fatto che quando incontra 8 torna indietro di una posizione e poi sovrascrive 'i' dove c'era 'o'? Cioè, in altre parole, che nello stream rimane TUTTO, ma fgets() manda in uscita solo quello che ha un senso se espresso come stringa ("traducendolo" in una stringa, intendo, e aggiungendo per buona misura il '\n')?