Backslash in Doppelbackslash umwandeln
-
So?
char* p = AppPath; while ( *p ) { if ( *p == '\\' ) *p = '/'; ++p; }
-
David_pb schrieb:
So?
char* p = AppPath; while ( *p ) { if ( *p == '\\' ) *p = '/'; ++p; }Das funktioniert, dankeschön für die schneller Antwort.
-
Hanzotto234 schrieb:
Das funktioniert, dankeschön für die schneller Antwort.
David_pbs Vorschlag ist etwa das, was
std::replace()macht. Aber willst du nichtstd::stringbenutzen?
-
Hi,
Hanzotto234 schrieb:
Nun möchte ich alle "\" duch "\" oder "/" ersetzen (Wegen der Escape Sequenzen).
also imho braucht man das doch nicht, weil diese Darstellung von '\' im Quellttext mit '\' ist doch nur im Quelltext so. Im Speicher steht ja nicht
"C:\\blub.txt" sonder "C:\blub.txt".
Die Escapesequencen sind dafür da, um nicht druckbare Zeichen, wie z.B. "new line" im String darzustellen. Diese werden dan in ihren entsprechenden Value umgewandelt: \n -> 0x0A.Gruß Pingu
-
Pingu-Group schrieb:
also imho braucht man das doch nicht, weil diese Darstellung von '\' im Quellttext mit '\' ist doch nur im Quelltext so. Im Speicher steht ja nicht
"C:\\blub.txt" sonder "C:\blub.txt".
Die Escapesequencen sind dafür da, um nicht druckbare Zeichen, wie z.B. "new line" im String darzustellen. Diese werden dan in ihren entsprechenden Value umgewandelt: \n -> 0x0A.Man sollte das schon ersetzen weil man sonst steuerzeichen im Pfad stehen hat und diese dann auch als solche interpretiert werden. Wenn ich dein Beispiel nehme wird eben nicht c:\blub.txt im Speicher stehen weil das \b zu einem Zeichen zusammengezogen wird (zumindest war das mal bei mir so). Deswegen würde ich zumindest die Pfadangaben immer maskieren um sicher zu sein.
-
Hundeman schrieb:
Man sollte das schon ersetzen weil man sonst steuerzeichen im Pfad stehen hat und diese dann auch als solche interpretiert werden. Wenn ich dein Beispiel nehme wird eben nicht c:\blub.txt im Speicher stehen weil das \b zu einem Zeichen zusammengezogen wird (zumindest war das mal bei mir so).
nein, das ist falsch.
ein backslash muss nur im quellcode maskiert werden, weil der compiler escape-sequenzen interpretiert, die mit \ beginnen. zur laufzeit gibt es diese sequenzen nicht mehr. wenn der backslash mal im string steht, ist er da und wird auch nicht anders interpretiert.
wenn der op also nicht gerade einen codegenerator schreibt, wäre diese ersetzung unnötig und sogar falsch. wobei das ersetzen von \ durch / für pfadangaben unter windows nicht weiter schadet.
-
Ok, dann wüsste ich aber gerne warum ich beim aufruf von
ExtractFilePath(Application->ExeName);
unter dem Borland Builder anstatt des nur Pfades in dem die Exe läuft einen Pfad erhalte indem die die Pfadangabe komplett maskiert ist. Ich lasse mich da gerne korrigieren aber das Verhalten vom Compiler gibt mir an solchen Stellen das Gefühl das ich bei Strings soetwas beachten muss (wenn ich selbst nen Text eingebe mag das was völlig anderes sein).
-
Hundeman schrieb:
Ok, dann wüsste ich aber gerne warum ich beim aufruf von
ExtractFilePath(Application->ExeName);
unter dem Borland Builder anstatt des nur Pfades in dem die Exe läuft einen Pfad erhalte indem die die Pfadangabe komplett maskiert ist.
das weiß ich nicht. wenn da aber sowas rauskäme wie "c:\\bla\\blubb.exe", dann wäre das schon ein starkes stück und definitiv falsch.
ich vermute aber, dass du dir den string im debugger angeschaut hast und der das evtl. so anzeigt.
-
/// schrieb:
das weiß ich nicht. wenn da aber sowas rauskäme wie "c:\\bla\\blubb.exe", dann wäre das schon ein starkes stück und definitiv falsch.
ich vermute aber, dass du dir den string im debugger angeschaut hast und der das evtl. so anzeigt.Über den Debugger angezeigt schon, aber wenn ich mir dann die Speicherstellen anschaue an der der String liegt stehen auch dort die Maskierungen drin, deswegen glaube ich nicht, dass das nur ne debuggergeschichte ist. Aber vielleicht ist das auch nur ein weiteres seltsames Verhalten von der IDE.
-
Hi nochmal,
#include <iostream> int main(int argc, char** argv) { char test[] = "C:\\blub.txt"; std::cout << test; return 0; }[url=http://img147.imageshack.us/my.php?image=tetq.png]Visual C++ Debuger
[/url]
OllyDbgGrüßli Pingu