5

我正在尝试使用 boost 格式化字符串:

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

我得到的不是 msg 的内容,而是 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::wformat按照 wilx 的建议使用。或者您可以更改要使用的格式字符串"%ls"(其中 thel是字母ell,小 L。)这会修改"%s"预期的宽字符串。

于 2012-02-22T11:25:50.527 回答