5

ブーストを使用して文字列をフォーマットしようとしています:

wchar_t *msg;
// fill msg
boost::format("Error: %s") % msg).str()

msg のコンテンツの代わりに得られるのは、16 進数の msg のアドレスです。

次のようなものでは成功しません:

boost::format("Error: %s") % new std::wstring(msg)
boost::format("Error: %1%") % msg

注:無関係だと思いますが、msgを埋める方法は次のとおりです。

FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_ALLOCATE_BUFFER | 40, NULL, GetLastError(), MAKELANGID(0, SUBLANG_ENGLISH_US), (LPTSTR) &msg, 512, NULL);

Visual Studio Watch は msg の内容を正しく表示します。

4

2 に答える 2

10

文字列の操作に使用boost::wformatしてみてくださいwchar_t

于 2012-02-22T11:07:49.263 に答える
0

boost::wformatwilxの提案どおりに使用できます。または、使用する書式文字列を変更することもできます"%ls"(ここで、lは文字ell、小文字の L です)。これにより、"%s"がワイド文字列を期待するように変更されます。

于 2012-02-22T11:25:50.527 に答える