Seltsames Verhalten von UnicodeString und sprintf



  • Ich habe

    char *text = "hello";
    UnicodeString Status = "";
    UnicodeString Text = UnicodeString().sprintf(L"%8s [%s]",AnsiString(text),Status);
    

    Er macht mir nun aus %8s und AnsiString(text) irgendwelche japanischen Zeichen, anstatt "hello" mit aufgefüllten spaces bis es 8 Zeichen sind und bei %s Status macht er mir "(null)" draus. Ist das jetzt eine Eigenart von UnicodeString?

    Erwartet hätte ich diese Ausgabe:
    "xxxhello []" x=Leerzeichen

    Wenn ich UnicodeString mit AnsiString ersetze klappt es wie erwartet, aber warum ist das so?



  • UnicodeString::sprintf() erwartet für "%s" einen wchar_t-String, du übergibst aber einen char-String (AnsiString().c_str()). Da sprintf() nicht typsicher ist, wird dein Argument als wchar_t-String interpretiert.

    (Du kannst allerdings mithilfe von CbdeFormat Laufzeit-Typprüfungen erzwingen, so daß in einem Fall wie diesem eine Exception auf den Fehler aufmerksam macht. Ausführlich habe ich das hier erläutert.)


Anmelden zum Antworten