Seite 1 von 1
C++ String (escape-sequenzen)
Verfasst: Di Aug 06, 2013 9:16 am
von xerion21
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:
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
Re: C++ String (escape-sequenzen)
Verfasst: Di Aug 06, 2013 10:01 am
von Xin
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.
Re: C++ String (escape-sequenzen)
Verfasst: Di Aug 06, 2013 11:27 am
von xerion21
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?
Re: C++ String (escape-sequenzen)
Verfasst: Di Aug 06, 2013 11:41 am
von Xin
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.
Re: C++ String (escape-sequenzen)
Verfasst: Di Aug 06, 2013 12:00 pm
von xerion21
nun habe ich meinen Denkfehler endlich verstanden

Eigentlich viel zu simpel
Danke für die Hilfe!
kann geschlossen werden!
Re: C++ String (escape-sequenzen)
Verfasst: Di Aug 06, 2013 12:15 pm
von Xin
xerion21 hat geschrieben:nun habe ich meinen Denkfehler endlich verstanden

Eigentlich viel zu simpel

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. ^^
Re: C++ String (escape-sequenzen)
Verfasst: Di Aug 06, 2013 2:08 pm
von xerion21
Also mit C++ komme ich verdammt gut klar
ist an sich ja auch einfach logisch und macht mehr Spaß als Python, finde ich
Nunja
Danke nochmal