fgets und stdin - komisches Verhalten auf Windows
-
Ich lese mit fgets über stdin unter Windows und habe \r\n bzw. 0D0A als Zeilenende. Wenn ich mir aber den gelesenen Datensatz im Debugger anschaue, fehlt \r bzw. 0D. Jede Zeile ist um ein Byte kürzer. Mache ich das Gleiche über einen Dateipointer (fgets(inbuffer,sizeof(inbuffer),fp), erhalte ich das korrekte Ergebnis. 0D0A bleibt in diesem Fall erhalten. Ich bin für jede Hilfe, Ideen dankbar. Warum verschluckt fgets bei stdin das \r?
-
Der C Standard kennt für Zeilenumbrüche nur '\n', in Windows ist dieser aber als '\r\n' (13,10) kodiert, deshalb arbeiten alle textorientierten Dateioperationen mit einem entsprechenden impliziten Mapping '\r\n' <--> '\n', stdin gehört dazu.
Falls du einen Binärmodus wählst, gibt es dieses implizite Mapping nicht.
-
Danke dir für die prompte Antwort. Das hilft schon weiter. Kann man denn bei stdin fopen(stdin,"rb") machen d.h. binär öffnen? Ich dachte bei einem Stream von Standard lässt man den fopen weg.
-
Das wäre Unsinn, da stdin ja schon offen ist.