Esistono diversi livelli di astrazione per rappresentare una nuova riga: il runtime del linguaggio di programmazione, l'editor di testo e il sistema operativo. CR (carriage return) e LF (line feed) sono due caratteri di controllo definiti in ASCII. Un'altra codifica di charator potrebbe anche definire un carattere "nuova linea". Il tasto Invio su qualsiasi tastiera trasmette il significato di "all'inizio della riga successiva". La tastiera decide come mappare il tasto Invio sul relativo charactor o charactor di controllo. Alcune tastiere differiscono anche il tasto Invio e Ritorno - lascia che il tasto Invio sia una nuova riga e il tasto Invio sia il ritorno a capo.In una tastiera ANSI standard, c'è solo il tasto Invio, che è mappato su un carattere di ritorno a capo (13) in ASCII. Quindi questo è il contenuto effettivo che viene inviato al sistema operativo dal dispositivo. Tuttavia, diversi SO decidono di interpretare il tasto Invio in modo diverso. Quindi, in un sistema simile a Unix, qualsiasi ritorno a capo viene tradotto in un carattere di avanzamento riga (10 in ASCII) prima di passare al programma che riceve l'input. E su Windows, un CR viene tradotto in due caratteri: un CR seguito da un LF. Tuttavia, è possibile impostare il flusso di input in modo raw, nel qual caso il programma ottiene ciò che la tastiera effettivamente invia. Ora l'editor entra in gioco. Quando l'editor riceve un CR dallo stdin in modalità raw, sa che il CR corrisponde al tasto Invio sulla tastiera (assunto dalla tastiera) e dovrebbe visualizzare una nuova riga sullo schermo. Nella modalità raw, dovrebbe chiamare la chiamata di sistema write per generare un CR + LF. Se il flusso di output non è nella modalità raw, l'editor di testo deve generare la sequenza specifica del sistema operativo come LF su linux.
Infine, il runtime della lingua può anche interpretare la nuova linea a modo suo. Ad esempio, lo standard C dice: Quando si scrive un file in modalità testo, '\ n' viene tradotto in modo trasparente nella sequenza newline nativa utilizzata dal sistema, che può essere più lungo di un carattere. Durante la lettura in modalità testo, la sequenza nativa newline viene tradotta in "\ n". In modalità binaria, nessuna traduzione viene eseguita e la rappresentazione interna prodotta da '\ n' viene emessa direttamente. Nota che '\ n' e '\ r' sono caratteri specifici della lingua che rappresentano rispettivamente LF e CR che sono popolari nei linguaggi C-like. Ma non tutte le lingue devono usare questa notazione.
Per la seconda domanda, "\ n" è '\ n' seguito da un terminatore '\ 0'. Non c'è modo di inserire un '\ 0' dalla console.
fonte
2018-01-07 18:40:53
Correlato: http://stackoverflow.com/questions/1355095/what-is-the-difference-between-r-and-n – Mysticial
C applica gli escape a letterali sia singoli che doppi, quindi "\ n" è stringa due caratteri di lunghezza, il primo è il codice ASCII 10 (\ n stesso) e il secondo - NULL ASCII (terminatore null). – toriningen
(Spero non ti dispiaccia le modifiche al titolo, sono lì per renderlo più ricercabile.) –