[C#] Kuriositäten der C# Console

Programmiersprachen, APIs, Bibliotheken, Open Source Engines, Debugging, Quellcode Fehler und alles was mit praktischer Programmierung zu tun hat.
Antworten
Benutzeravatar
BeRsErKeR
Establishment
Beiträge: 689
Registriert: 27.04.2002, 22:01

[C#] Kuriositäten der C# Console

Beitrag von BeRsErKeR »

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?
Ohne Input kein Output.
odenter
Establishment
Beiträge: 207
Registriert: 26.02.2009, 11:58

Re: [C#] Kuriositäten der C# Console

Beitrag von odenter »

Also

Code: Alles auswählen

static void Main(string[] args)
    {
      Console.WriteLine(args[0].ToUpper());
    }
Parameter foo<> übergeben gibt

Code: Alles auswählen

FOO<>
aus.
Parameter \"foo<>\" übergeben gibt

Code: Alles auswählen

"FOO<>"
aus.
Parameter "foo<>" übergeben gibt

Code: Alles auswählen

FOO<>
aus.
Benutzeravatar
BeRsErKeR
Establishment
Beiträge: 689
Registriert: 27.04.2002, 22:01

Re: [C#] Kuriositäten der C# Console

Beitrag von BeRsErKeR »

Hm bei mir irgendwie nicht. :(
Ohne Input kein Output.
Dennis
Beiträge: 33
Registriert: 10.02.2004, 20:00

Re: [C#] Kuriositäten der C# Console

Beitrag von Dennis »

Ist das nicht das erwartete Verhalten? "asd das" sollte doch der Konsole signalisieren das es ein Parameter ist und nicht zwei(Gerade nicht bei Dateinamen mit Leerzeichen).
Benutzeravatar
BeRsErKeR
Establishment
Beiträge: 689
Registriert: 27.04.2002, 22:01

Re: [C#] Kuriositäten der C# Console

Beitrag von BeRsErKeR »

Darum geht es aber nicht, sondern darum, dass in der Konsole ^-Zeichen stehen, wo vorher mal < oder > stand und diese bereits gelöscht wurden. Und dass die Position dieser Zeichen scheinbar nach dem Löschen noch mittransformiert werden, obwohl sie nicht existent sind.
Ohne Input kein Output.
Benutzeravatar
spobat
Beiträge: 86
Registriert: 13.09.2010, 00:20
Kontaktdaten:

Re: [C#] Kuriositäten der C# Console

Beitrag von spobat »

Zeig doch einfach mal deinen Quellcode. Ohne den kann dir keiner helfen ;)
Dennis
Beiträge: 33
Registriert: 10.02.2004, 20:00

Re: [C#] Kuriositäten der C# Console

Beitrag von Dennis »

Ok, habe irgendwie überhaupt nicht deinen Beitrag gelesen sondern nur den darunter und darauf geantwortet.
BIst du dir sicher das sie beim direkten Starten die Zeichen richtig übertragen werden(als Parameter)? Klingt für mich eher nach einem Konvertierungsfehler bei der Übergabe der Zeichen.
Benutzeravatar
BeRsErKeR
Establishment
Beiträge: 689
Registriert: 27.04.2002, 22:01

Re: [C#] Kuriositäten der C# Console

Beitrag von BeRsErKeR »

Das Problem ist erstmal aus dem Fokus geraten weil das Projekt jetzt vorerst auf Eis gelegt wurde. Wenn es irgendwann weiter geht werd ich da nochmal Zeit reinstecken und mich wieder melden. ;)
Ohne Input kein Output.
Antworten