[C#] Kuriositäten der C# Console
Verfasst: 05.08.2012, 15:53
Hallo ich hab grad ein komisches Problem mit meinem C# Programm. Ich erhalte per Kommandozeile einen String als Parameter, den ich dann ändere (z.B. ToLower) und mit Console.WriteLine wieder ausgebe. Es ist dann (beim Ausgeben) allerdings eine andere Variable (also nicht direkt die aus args[]). Soweit so toll. Enthält der String nun aber das Zeichen > oder < so kommt die Konsole erstmal gar nicht damit klar. Also hab ich den Parameter in Hochkommata gesetzt. Als Beispiel:
mein_tolles_programm.exe "foo<>"
Das frisst er dann und der String wird auch korrekt umgewandelt. Sobald ich nun aber den umgewandelten String ausgebe (ich muss dazu sagen, dass die beiden genannten Zeichen entfernt werden) taucht an den Stellen der Zeichen ein ^ auf.
Mal ein konkretes Beispiel. Ich nehme den Aufruf oben und der String wird nun mit ToUpper bearbeitet und noch die Reihenfolge der Zeichen gedreht. Die beiden Zeichen werden entfernt. Als String erhalte ich OOF, das passt im Debugger auch. Wenn ich das nun aber per Console.WriteLine ausgebe steht dort ^^OOF. Und das ist immer so egal ob ich die Reihenfolge der Zeichen ändere, die Groß-/Kleinschreibung ändere usw. Es tauchen immer diese ^ auf und verblüffenderweise an einer Stelle die der Texttransformation entspricht. Ich kann mir das nicht erklären. Wie gesagt im Debugger sind diese Zeichen nicht vorhanden. Es ist als würde die Konsole das irgendwie reinbasteln. Aber die Konsole weiß eigentlich nichts von meinen Texttransformationen ...
Beispielsweise wäre bei "foo<>a<bc" mit ToUpper und Drehung dann der Text in der Konsole CB^A^^OOF. Im Debugger steht korrekt CBAOOF.
Hat wer ne Idee?
Nachtrag: Ok ich seh grad wenn ich mit dem Debugger durchgehe (wo es passt) dann stimmt es auch in der Konsole. Ohne Debugger (mit gleichem Build, sowohl Debug als auch Release) passt es dann nicht mehr. Ist allerdings nun etwas blöd den Fehler zu finden ... wenn weder Debugger noch Prints in die Konsole möglich sind ...
Nachtrag: Wenn ich das Programm normal über cmd.exe starte dann geht es ebenfalls. Der Fehler scheint also irgendwie vom direkten Aufruf aus Visual Studio (ohne Debugger) herzurühren (Strg + F5). Hat jemand ne Idee was das sein könnte und wie man das umgeht? Irgendwas in den Projekteinstellungen oder bei den VS Optionen vielleicht?
mein_tolles_programm.exe "foo<>"
Das frisst er dann und der String wird auch korrekt umgewandelt. Sobald ich nun aber den umgewandelten String ausgebe (ich muss dazu sagen, dass die beiden genannten Zeichen entfernt werden) taucht an den Stellen der Zeichen ein ^ auf.
Mal ein konkretes Beispiel. Ich nehme den Aufruf oben und der String wird nun mit ToUpper bearbeitet und noch die Reihenfolge der Zeichen gedreht. Die beiden Zeichen werden entfernt. Als String erhalte ich OOF, das passt im Debugger auch. Wenn ich das nun aber per Console.WriteLine ausgebe steht dort ^^OOF. Und das ist immer so egal ob ich die Reihenfolge der Zeichen ändere, die Groß-/Kleinschreibung ändere usw. Es tauchen immer diese ^ auf und verblüffenderweise an einer Stelle die der Texttransformation entspricht. Ich kann mir das nicht erklären. Wie gesagt im Debugger sind diese Zeichen nicht vorhanden. Es ist als würde die Konsole das irgendwie reinbasteln. Aber die Konsole weiß eigentlich nichts von meinen Texttransformationen ...
Beispielsweise wäre bei "foo<>a<bc" mit ToUpper und Drehung dann der Text in der Konsole CB^A^^OOF. Im Debugger steht korrekt CBAOOF.
Hat wer ne Idee?
Nachtrag: Ok ich seh grad wenn ich mit dem Debugger durchgehe (wo es passt) dann stimmt es auch in der Konsole. Ohne Debugger (mit gleichem Build, sowohl Debug als auch Release) passt es dann nicht mehr. Ist allerdings nun etwas blöd den Fehler zu finden ... wenn weder Debugger noch Prints in die Konsole möglich sind ...
Nachtrag: Wenn ich das Programm normal über cmd.exe starte dann geht es ebenfalls. Der Fehler scheint also irgendwie vom direkten Aufruf aus Visual Studio (ohne Debugger) herzurühren (Strg + F5). Hat jemand ne Idee was das sein könnte und wie man das umgeht? Irgendwas in den Projekteinstellungen oder bei den VS Optionen vielleicht?