Backslash in String?



  • 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.



  • In @MyText steht nix drin! Das ist ein Platzhalter für einen Parameter, welcher der DB separat übergeben wird!!!
    Das was MySql macht mit dem Esquaping macht ist IMHO nur gemurkse und nicht eine saubere Lösung...
    Eine saubere Lösung ist z.B.:
    http://www.uni-kiel.de/rz/lehr/doku/perlkurs/node88.html

    Add: Und die MS-DB Schnittstellen können das alle... z.B. CDaoRecordset::SetParamValue



  • Schön. Und was glaubst du was dieser Code dann macht?
    Der setzt auch nur einen SQL-Query zusammen und senden diesen an die Datenbank.

    Wenn du dann in diesem Text ein Escape drin hast muss du dies auch ändern.
    Ob das die Funktionen zum Binden von Parametren dann im Hintergrund machen ändert nichts daran das es gemacht werden muss.

    Du spricht im Übrigen von einem Scriptsprache, Framework oder sonstwas.
    Ich spreche von Direkt mit der DB kommunizieren über C-API
    DU kannst auch ODBC verwenden um mit Datenbank zu sprechen nur ist das nicht sehr effizient.



  • Ich will Dir wirklich nicht zu Nahe treten... aber wer sowas behauptet hat von "echten" Datenbanken keine Ahnung...
    Schau Dir mal bitte die Native Interfaces von "echten" Datenbanken wie DB2, Oracle, MS-SQL, usw. an!
    Nur als kleiner Hinweis (DB2):
    http://www.devx.com/IBMDB2/Article/27475
    (und da im besonderen BindParam)


Anmelden zum Antworten