Was bedeutet printf(“\033c” )?

Lesezeit: 3 Minuten

Benutzeravatar von NUGA
NUGA

Ich habe nach einer Möglichkeit gesucht, mein Unix-Terminalfenster nach dem Schließen meines Programms “zurückzusetzen”, und bin darauf gestoßen printf("\033c" ); das funktioniert perfekt, aber ich kann es einfach nicht verstehen. ich ging zu man console_codes und da ich etwas unerfahren in Unix-C-Programmierung bin, war es nicht sehr hilfreich.

Könnte jemand erklären printf("\033c" );?

Der Benutzer-Avatar eines Programmierer-Typen
Irgendein Programmierer

In C sind Zahlen beginnend mit einer führenden Null oktal Zahlen. Zahlen in Basis 8.

Es druckt das Zeichen, das durch die Oktalzahl dargestellt wird 33 gefolgt von einem 'c'.

Im ASCII-Codierung die Oktalzahl 33 ist der ESC (Escape-)Zeichen, das ein übliches Präfix für Terminal-Steuersequenzen ist.

Mit diesem Wissen können wir bei der Suche nach terminalen Kontrollsequenzen z diese VT100-Steuersequenzreferenz (VT100 war ein altes “dummes” Terminal und wird von den meisten modernen Terminalprogrammen emuliert). Unter Verwendung der VT100-Referenz finden wir <ESC>c im Terminal-Setup-Abschnitt, wo es dokumentiert ist

Rückstelleinrichtung <ESC>c

Setzen Sie alle Terminaleinstellungen auf die Standardeinstellungen zurück.


Das ESC Zeichen können auch mit gedruckt werden "\x1b" (immer noch ASCII-Codierung vorausgesetzt). Es gibt keine Möglichkeit, Dezimalzahlen in konstanten Zeichenfolgenliteralen zu verwenden, sondern nur Oktal- und Hexadezimalzahlen.

Jedoch (wie im Kommentar von Chux angemerkt) die Sequenz "\x1bc" Wille nicht mach das gleiche wie "\033c". Das ist, weil 0x1bc ist eine gültige Hexadezimalzahl, und der Compiler ist gierig wenn es solche Sequenzen analysiert. Es wird das Zeichen gedruckt, das durch den Wert dargestellt wird 0x1bc stattdessen, und ich habe keine Ahnung, was es sein könnte (abhängig von Gebietsschema und Terminaleinstellungen, nehme ich an, wird möglicherweise als Unicode-Zeichen gedruckt).

  • Nun, ich glaube nicht, dass es eine bessere Antwort gibt! Vielen Dank, dass Sie mir nicht nur etwas Neues beigebracht, sondern auch eine korrektere Antwort gegeben haben.

    – NUGA

    27. November 2017 um 4:13 Uhr


  • Unerheblich: "\x1bc" möglicherweise nicht das gleiche Ergebnis wie "\033c" da das Hex-Escape nicht eindeutig längenbegrenzt ist. Könnte benutzen "\x1b" "c"

    – chux – Wiedereinsetzung von Monica

    27. November 2017 um 4:17 Uhr


  • @chux Der Beweis, dass selbst Erfahrung manchmal nicht alles bedeutet. Und diese “Code”-Bewertungen tun Hilfe. 🙂

    – Irgendein Programmierer-Typ

    27. November 2017 um 4:21 Uhr


  • Dezimalzahl: printf("%cc", 27); 🙂

    – Rici

    27. November 2017 um 4:31 Uhr

  • “und die printf-Funktion ist gierig, wenn sie Zeichen liest” Zeichen-Escape-Sequenzen werden zur Kompilierzeit aufgelöst, nicht durch printf Funktion.

    – Benutzer694733

    27. November 2017 um 9:56 Uhr

Benutzeravatar von Thomas Dickey
Thomas Dickey

Das ist eine Escape-Sequenz verwendet zurücksetzen ein DEC VT100 (oder kompatibles) Terminal. Einige Terminals (z. B. die Linux-Konsole) akzeptieren Escape-Sequenzen im VT100-Stil, auch wenn es sich nicht um VT100 handelt.

Das \033 ist das ASCII-Escape-Zeichen, das diese Sequenzen beginnt. Auf die meisten folgt ein weiteres Sonderzeichen (dies ist eine seltene Ausnahme). XTerm-Steuersequenzen listet das zusammen mit anderen auf, denen kein Sonderzeichen folgt.

In ECMA-48 ist es möglich, für den Normalfall ein anderes Zeichen zu verwenden, z. [ for the *control sequence initiator.

Resetting a real VT100 (in contrast to a terminal emulator) does more than clear the screen, as noted in Debian Bug report logs – #60377
“reset” broken for dumb terminals
, but users of terminal emulators tend to assume it is a short way to clear the screen. The standard way would be something like this:

printf("\033[H\033[J");

The ncurses FAQ Why does reset log me out? addresses that issue.

Incidentally, users of terminal emulators also get other issues with the terminal confused. The ncurses FAQ How do I get color with VT100? addresses one of those.

  • Thanks for your response! With the answer Some Programmer Dude provided the terminal, after “clearing” would stick mid way instead of at the top left corner like it should, and my OCD kicked in so i had to stick with 033c. But yours actually does the same, without the possible issues you pointed out.

    – NUGA

    Nov 27, 2017 at 9:40

Darshu's user avatar
Darshu

It clears the screen in Linux type operating systems (ubuntu, fedora etc…).
You can check here on asciitable.com, under octal 33 (decimal 27) you have ESC character.

1432760cookie-checkWas bedeutet printf(“\033c” )?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy