Die Windows-Konsole folgt der gleichen Zeilenendekonvention, die für Dateien angenommen wird, oder um genau zu sein, für tatsächliche physische Terminals. Sie benötigt sowohl CR als auch LF, um ordnungsgemäß zur nächsten Zeile zu wechseln.
Davon abgesehen gibt es eine Menge Softwareinfrastruktur zwischen einem ANSI-C-Programm und dieser Konsole. Insbesondere wird jeder Standard-C-Bibliotheks-E/A-Funktion versuchen, das Richtige zu tun, vorausgesetzt, Sie haben ihm die Chance dazu gegeben. Deshalb wurden die t
und b
Modifikatoren für den mode
-Parameter bei fopen()
definiert.
Mit t
(der Standard für die meisten Streams, insbesondere für stdin
und stdout
) wird jede gedruckte \n
Sequenz in eine CRLF-Sequenz konvertiert, und umgekehrt passiert dies bei Lesevorgängen. Um dieses Verhalten auszuschalten, verwenden Sie den b
Modifikator.
Übrigens benötigen die Terminals, die traditionell an *nix-Boxen angeschlossen sind, einschließlich des von XTerm emulierten DEC VT100, ebenfalls sowohl CR als auch LF. Allerdings wird in der *nix-Welt die Umwandlung eines Newline-Zeichens in eine CRLF-Sequenz im tty-Gerätetreiber behandelt, damit die meisten Programme nichts darüber wissen müssen, und die Modifikatoren t
und b
werden beide ignoriert. Auf diesen Plattformen müssen Sie, wenn Sie Zeichen auf einem tty senden und empfangen müssen, ohne diese Modifikation, stty(1) oder die davon abhängigen Systemaufrufe konsultieren.
Wenn Ihr ansonsten ANSI-C-Programm die C-Bibliotheks-E/A zur Konsole vermeidet (vielleicht weil Sie Zugriff auf die Zeichenfarbe der Konsole und andere Attribute benötigen), dann hängt es davon ab, welche Win32-API-Aufrufe Sie verwenden, um die Zeichen zu senden, ob Sie CR senden müssen oder nicht.