UnicodeString und swscanf



  • Hier bekomme ich ein Speicherproblem.

    UnicodeString Text = "2:2";
    UnicodeString Param1,Param2;
    swscanf(Text.c_str(), L"%s-%s", &Param1, &Param2);
    

    Das klappt naürlich.

    wchar_t Param1[100];
    swscanf(sTime.c_str(), L"%s", &Param1);
    

    Was muss ich tun um es als UnicodeString ablegen zu können? 😕
    Mit &Param1.c_str() kann ich nicht ran, da er eine Speicheradresse will.



  • Hallo

    swscanf und String-Klassen für Ergebnisse werden nie zusammenarbeiten, denn swscanf kann der String-Instanz nicht mitteilen wie groß der neue interne Buffer sein soll. Sowohl das erste als auch das zweite Speicherproblem sind direkte Auswirkungen dieser Inkompatibilität. Entweder bleibst du bei swscanf und wchar_t-Arrays (C-Variante), oder du verwendest String-Klassen und deren Methoden wie Pos und SubString (C++ bzw. VCL-Variante).

    Zweiteres ist deshalb besser, weil du damit gleich die potentielle Buffer-Overflow-Angriffsstelle aus deinem wchar_t-Beispiel behebst.

    bis bald
    akari



  • Danke! Das ist Schade. swscanf war eine nette Methode um Text zu parsen anhand einer Maske. Nur kann es hier ja zu einer Speicherüberlauf kommen wenn %s grösser ist als das definierte wchar_t. 😞

    Wenn ich mich für swscanf entscheide, wie verhindere ich dort einen möglichen Überlauf?



  • Hallo

    Auch von swscanf gibt es eine sichere Version, bei der du angegeben kannst wie viele Zeichen maximal in das Ziel geschrieben werden können.

    bis bald
    akari


Anmelden zum Antworten