動作確認
C++ Builder XE4
文字コードの扱いにちょっとはまったのでメモ。
char dmy[] = "test";
String str_char_arg;
String str_String_arg;
AnsiString astr;
// case1
str_char_arg = String().sprintf(L"%s", dmy); // garble
// case2
String strMiddle = dmy;
str_String_arg = String().sprintf(L"%s", strMiddle); // OK
// case3
astr = AnsiString().sprintf("%s", dmy); // OK
int nop=1;
上記において、case1では文字化けが発生し、case2, case3では問題ない。
dmyはchar[]型なので、それをString型のL"%s"に渡すと失敗するということ。
case2のように、一度String型に変換するか、case3のようにAnsiStringで受ける方法がある。
10.2 Tokyo
(追記 2017/12/26)
動作環境
Rad Studio 10.2 Tokyo Update 2
Tokyoでも同じ動作であることを確認した。