Backslash in String?



  • Hallo,

    normal keine große Sache, aber ich bekomme den Backslash in einem String nicht hin.

    Wandle einen Pfad (C:\hallo\du.txt) in einen String um und er nimmt natürlich das \h \d als ein Zeichen.

    WIe kann ich das umgehen?

    dankeschön

    mfg Harry



  • c:*\*hallo\**du.txt



  • * storage fuer neuen string anlegen
    * zeichenweise kopieren
    * wenn ein backslash in der quelle ist, zwei backslashes ins ziel schreiben (schreibzeiger entsprechend verschieben)



  • c.rackwitz schrieb:

    * storage fuer neuen string anlegen
    * zeichenweise kopieren
    * wenn ein backslash in der quelle ist, zwei backslashes ins ziel schreiben (schreibzeiger entsprechend verschieben)

    Nein, das ist natürlich Unsinn.



  • dEUs schrieb:

    c.rackwitz schrieb:

    * storage fuer neuen string anlegen
    * zeichenweise kopieren
    * wenn ein backslash in der quelle ist, zwei backslashes ins ziel schreiben (schreibzeiger entsprechend verschieben)

    Nein, das ist natürlich Unsinn.

    kannst du deine meinung auch begruenden?



  • Danke mal 😉 aber da gibts nochn paar Fragen:

    Wie legt man nen storage an?
    bzw. find ich das doch irgendwie schwach das man ein doch nicht so selten gebräuchliches Zeichen derartig erstellen muss.



  • Habt ihr die Antwort von Pellaeon übersehen?



  • hallo ne natürlich nicht, nur öffne ich die Datei zuerst und übergeb sie dann dem String m_strFilePath.

    Dadurch kann ich das nicht einfach so reinschreiben sondern müsste nach jedem / ein noch ein / hinzufügen.

    ne Möglickeit wär halt mit den Funktionen FIND und INSERT zu arbeiten, wollte jedoch nur wissen obs ne einfachere Möglichkeit gibt.

    mfg harry



  • c.rackwitz schrieb:

    dEUs schrieb:

    c.rackwitz schrieb:

    * storage fuer neuen string anlegen
    * zeichenweise kopieren
    * wenn ein backslash in der quelle ist, zwei backslashes ins ziel schreiben (schreibzeiger entsprechend verschieben)

    Nein, das ist natürlich Unsinn.

    kannst du deine meinung auch begruenden?

    Sicher. Siehe FAQ: http://www.c-plusplus.net/forum/viewtopic-var-t-is-39458.html
    Inzwischen würde ich es zwar etwas anders erklären, aber man müsste es trotzdem verstehen.

    @harrychen:
    Du musst einen Backslash nur (und NUR) in deinem Quellcode escapen. In Dateien, die du einliest bzw. in Usereingaben musst du das nicht tun.



  • achso versteh schon danke, dann hab ich sozusagen ja eh keine Probleme da ich die Datei auswählen lasse...

    dankeschön

    mfg harry



  • korrekt



  • deus, dann hab ich die frage falsch interpretiert. konnte ja nicht ahnen, dass jemand sowas nicht weiss. mein fehler.
    davon abgesehen lassen sich backslashes in strings so quoten.



  • c.rackwitz schrieb:

    deus, dann hab ich die frage falsch interpretiert. konnte ja nicht ahnen, dass jemand sowas nicht weiss. mein fehler.

    Das kommt leider recht häufig vor. Daher auch der FAQ-Eintrag, weil ich es irgendwann leid war immer wieder zu erklären 😉

    c.rackwitz schrieb:

    davon abgesehen lassen sich backslashes in strings so quoten.

    Was du damit sagen willst versteh ich leider nciht. Deine Vorgehensweise wird nie benötigt (programmatisch einen \ durhc 2 zu ersetzen)



  • dEUs schrieb:

    c.rackwitz schrieb:

    davon abgesehen lassen sich backslashes in strings so quoten.

    Was du damit sagen willst versteh ich leider nciht. Deine Vorgehensweise wird nie benötigt (programmatisch einen \ durhc 2 zu ersetzen)

    Passt perfekt hierher.
    Es gibt Fälle wo man in einem String (Variable) alle \ quoten muss. Und nicht nur die Backslash. Bei MySQL wenn man den Query der DB übergibt. MySQL hat aber eine Funktion dafür. (mysql_escape_string() oder so ähnlich)

    Nach so einem Spezialfall wurde aber hier nicht gefragt und deshalb ist es die Standardantwort aus der FAQ.



  • Einer Datenbank-Abfrage übergibt man nie Daten im Query-String!!! Da öffnest Du tür und Tor für SQL-Injects!
    Dazu gibt es Parameter, die man separat der Datenbank übergibt!



  • Dann schreibe mal bitte einen INSERT dem du beim INSERT keine Daten (z.B. Text) übergibst.

    Also z.B.

    INSERT INTO tabelle SET spalte = 'Hallo Welt';

    bzw.

    INSERT INTO tabelle (spalte) VALUES ('Hallo Welt');



  • INSERT INTO tabelle (spalte) VALUES (@MyText);

    Und das "@MyText" übergibst Du direkt Deiner Datenbankverbindung!
    Suche doch bitte mal nach SQL-Inject...

    Jede vernünftige Datenbank unterstützt das übergeben von Parametern!



  • kann MySQL das? 😃



  • Unix-Tom schrieb:

    dEUs schrieb:

    c.rackwitz schrieb:

    davon abgesehen lassen sich backslashes in strings so quoten.

    Was du damit sagen willst versteh ich leider nciht. Deine Vorgehensweise wird nie benötigt (programmatisch einen \ durhc 2 zu ersetzen)

    Es gibt Fälle wo man in einem String (Variable) alle \ quoten muss. Und nicht nur die Backslash.

    Zugegeben, an diesen Fall habe ich nciht gedacht 👍



  • Du kannst mir glauben wenn ich dir sage das ich weiß was SQL-Injetions sind.

    Was steht in @MyText drin.
    Liefere doch mal etwas Code bitte.


Anmelden zum Antworten