boost :: format和wchar_t

时间:2012-02-22 10:57:13

标签: c++ boost formatting wchar-t

我正在尝试使用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的内容。

2 个答案:

答案 0 :(得分:8)

尝试使用boost::wformat处理wchar_t字符串。

答案 1 :(得分:0)

您可以按照wilx的建议使用boost::wformat。或者您可以更改格式字符串以使用"%ls"(其中l是字母 ell ,小L.)这会修改"%s"以期望宽字符字符串。