C++ String (escape-sequenzen)

Schnelle objektorientierte, kompilierende Programmiersprache.
Antworten
xerion21
Beiträge: 162
Registriert: Mo Jul 08, 2013 3:37 pm

C++ String (escape-sequenzen)

Beitrag von xerion21 » Di Aug 06, 2013 9:16 am

Hey zusammen,

ich habe ein Frage. Ich schreibe momentan ein kleines Programm und habe folgendes festgestellt:
Wenn ich einen Pfad in einer externen Text-Datei speichere und diesen Pfad auslesen lasse via file.open (etc) und diesen Pfad in einen string vector speichere, wird der Pfad einwandfrei übernommen.
Zum Einlesen:

Code: Alles auswählen

file.open(quelldatei.c_str(), ios::binary|ios::in);
while (!file.eof()) { 				
		getline(file,uebergabe);
		programme.push_back(uebergabe); //programme ist der String-Vector
}
[...]

system(programme[i].c_str());
Die Textdatei:

Code: Alles auswählen

scripts\Programm.bat
Wenn ich jedoch direkt einen Pfad in einen String im Quelltext definiere, dann benötige ich zwei '\'.
Quelltext:

Code: Alles auswählen

a_uebergabe = "scripts\\ram.bat";
system(a_uebergabe.c_str());
Klar benötige ich diese, bezüglich der Escape-Sequenzen, aber warum benötige ich sie da und beim 1. Beispiel nicht?!

Mit freundlichen Grüßen

Xerion21

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: C++ String (escape-sequenzen)

Beitrag von Xin » Di Aug 06, 2013 10:01 am

Moin xerion
xerion21 hat geschrieben:Klar benötige ich diese, bezüglich der Escape-Sequenzen, aber warum benötige ich sie da und beim 1. Beispiel nicht?!
Eigentlich hast Du Dir die Antwort schon selbst gegeben: Die Escape-Sequencen.

Beim ersten Beispiel lädst Du Byte für Byte in den Arbeitsspeicher: Das gilt auch für das '\'-Zeichen.

Beim zweiten Beispiel liest der Parser des Compilers den Text - Byte für Byte - und interpretiert den Quelltext anschließend. Damit er die Sonderzeichen in einen String einbauen kann, braucht er die Escape-Sequenzen und damit Du dann ein '\' in den Text einbauen kannst, muss '\' ebenfalls eine Escape-Sequenz sein. Der Parser liest also - genau wie Du - jeden Backslash, interpretiert dann aber den Quelltext. Das tust Du nicht. Dein Pfad soll keine als ASCII-Text umschriebenen Newlines oder Tabs enthalten (Man könnte \n ja auch mit Return ausdrücken, aber das echte Newline wird vom Parser ja ignoriert, damit das Programm nicht nur in einer Zeile stehen muss ;-)). Also liest Du den Text genauso, wie er da drin steht und nutzt ihn ohne ihn weiter zu parsen.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

xerion21
Beiträge: 162
Registriert: Mo Jul 08, 2013 3:37 pm

Re: C++ String (escape-sequenzen)

Beitrag von xerion21 » Di Aug 06, 2013 11:27 am

Danke für die schnelle Antwort! :)

Wenn ich also Byte ffür Byte in Beispiel eins einlese und es an den stringvector übergebe und diesen dann auslesen sollte, hat er ein Backslash.

Im 2. Beispiel, muss ich ihm somit erst sagen, dass dies ein Backslash darstellen möchte, indem ich einen weiteren hinzufüge ('\\').

Wieso denkt der Compiler nicht, dass es sich um den String in Beispiel eins auch um eine Escape-Sequence handelt?

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: C++ String (escape-sequenzen)

Beitrag von Xin » Di Aug 06, 2013 11:41 am

xerion21 hat geschrieben:Wieso denkt der Compiler nicht, dass es sich um den String in Beispiel eins auch um eine Escape-Sequence handelt?
Weil da kein Compiler - also eben auch kein Quelltextparser - ist.

Wenn Du das Programm ausführst, ist es ja bereits kompiliert.
Den Text, den Du liest, ist ja kein Quelltext, also wird auch nicht nach Escape-Sequencen gesucht.

Nach Escape-Sequenzen zu suchen ist Aufgabe des Compilers, nicht der Programmiersprache. Damit der Compiler das tut, muss der Compiler-Programmierer seinem Programm das explizit beibringen, damit der Compiler - wenn er dann als ausführbares Programm ausgeführt wird - überhaupt nach Escape-Sequenzen sucht.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

xerion21
Beiträge: 162
Registriert: Mo Jul 08, 2013 3:37 pm

Re: C++ String (escape-sequenzen)

Beitrag von xerion21 » Di Aug 06, 2013 12:00 pm

nun habe ich meinen Denkfehler endlich verstanden :D
Eigentlich viel zu simpel :D

Danke für die Hilfe!

kann geschlossen werden!

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: C++ String (escape-sequenzen)

Beitrag von Xin » Di Aug 06, 2013 12:15 pm

xerion21 hat geschrieben:nun habe ich meinen Denkfehler endlich verstanden :D
Eigentlich viel zu simpel :D
Du hast keine Ahnung, wie oft ich das im Bereich C++ schon gehört habe.
C++ ist einfacher, als viele denken. Schwer ist es, das zu akzeptieren. ^^
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

xerion21
Beiträge: 162
Registriert: Mo Jul 08, 2013 3:37 pm

Re: C++ String (escape-sequenzen)

Beitrag von xerion21 » Di Aug 06, 2013 2:08 pm

Also mit C++ komme ich verdammt gut klar ;)
ist an sich ja auch einfach logisch und macht mehr Spaß als Python, finde ich :D

Nunja :D

Danke nochmal

Antworten