Ihr Ergebnis hängt davon ab, auf welcher Art von Terminal- oder Konsolenprogramm Sie sich befinden. Bei den meisten \b
handelt es sich jedoch um eine zerstörungsfreie Rücktaste. Der Cursor wird rückwärts bewegt, aber nicht gelöscht, was sich dort befindet.
Für den hello worl
Teil wird also der Code ausgegeben
Hallo Welt
^
... (wo ^
zeigt, wo sich der Cursor befindet) Dann werden zwei \b
Zeichen ausgegeben, die den Cursor zwei Stellen rückwärts bewegen, ohne ihn zu löschen (auf Ihrem Terminal):
Hallo Welt
^
Beachten Sie, dass sich der Cursor jetzt auf dem befindet r
. Dann gibt es aus d
, was das überschreibt r
und uns gibt:
Hallo Wodl
^
Schließlich wird \n
ausgegeben, was eine zerstörungsfreie neue Zeile ist (wiederum auf den meisten Terminals, einschließlich anscheinend Ihrer), sodass die l
unverändert bleibt und der Cursor an den Anfang der nächsten Zeile bewegt wird.
r
wird durch ersetztd
. Die Erklärung passt immer noch.cmd.exe
undcommand.com
nicht immer eingefügt (Sie können das Verhalten mit der Taste Ins umschalten). Ich war überrascht, dass Gnome Terminal auf meinem Hauptcomputer * nix immer eingefügt wird und nicht einmal eine Präferenz dafür zu haben scheint, geschweige denn basierend auf der Ins-Taste umzuschalten. Das habe ich noch nie bemerkt. Klar, ich will fast nie überschreiben. :-)quelle
'\n'
keine darstellung auf dem bildschirm hat. Was schon da ist, bleibt gleich; nicht durch ein Leerzeichen oder eine andere Zeichendarstellung ersetzt.Wenn Sie eine zerstörerische Rücktaste wünschen, benötigen Sie so etwas wie
dh eine Rücktaste, eine Leertaste und eine andere Rücktaste.
quelle
\b
bedeutet, dass das nächste Ausgabezeichen es überschreibt.0x7f
) implementiert , bin ich ratlos.Nicht zu schwer zu erklären ... Dies ist wie Tippen
hello worl
, zweimaliges Drücken der linken Pfeiltaste, zweimaliges Drückend
und Drücken der Abwärtspfeiltaste.Zumindest schließe ich so, dass Ihr Terminal die
\b
und\n
-Codes interpretiert .Leiten Sie die Ausgabe in eine Datei um und ich wette, Sie erhalten etwas ganz anderes. Möglicherweise müssen Sie sich jedoch die Bytes der Datei ansehen, um den Unterschied festzustellen.
[bearbeiten]
Um ein bisschen
printf
näher darauf einzugehen, gibt dies eine Folge von Bytes aus:hello worl^H^Hd^J
wobei^H
das ASCII-Zeichen Nr. 8 und^J
das ASCII-Zeichen Nr. 10 sind. Was Sie auf Ihrem Bildschirm sehen, hängt davon ab, wie Ihr Terminal diese Steuercodes interpretiert.quelle
Verwenden Sie nach jedem Zeichen eine einzelne Rücktaste
printf("hello wor\bl\bd\n");
quelle