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=LeerzeichenWenn 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.)