boost::format 和 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
注意:尽管我认为这是无关紧要的,但我填充消息的方式是:
FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_ALLOCATE_BUFFER | 40, NULL, GetLastError(), MAKELANGID(0, SUBLANG_ENGLISH_US), (LPTSTR) &msg, 512, NULL);
并且 Visual Studio Watch 正确显示了消息的内容。
I am trying to format a string using boost:
wchar_t *msg;
// fill msg
boost::format("Error: %s") % msg).str()
What I get instead of msg's content, is the address of msg in hex.
No success with things like these:
boost::format("Error: %s") % new std::wstring(msg)
boost::format("Error: %1%") % msg
Note: Even though I think it's irrelevant, but the way that I fill msg is:
FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_ALLOCATE_BUFFER | 40, NULL, GetLastError(), MAKELANGID(0, SUBLANG_ENGLISH_US), (LPTSTR) &msg, 512, NULL);
and Visual Studio Watch displays the content of msg correctly.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
尝试使用
boost::wformat
来处理wchar_t
字符串。Try using
boost::wformat
to work withwchar_t
strings.您可以按照 wilx 的建议使用
boost::wformat
。或者您可以更改格式字符串以使用"%ls"
(其中l
是字母 ell,小 L。)这会修改"%s"
期望宽字符串。You can either use
boost::wformat
as suggested by wilx. Or you can change your format string to use"%ls"
(where thel
is the letter ell, small L.) This modifies the"%s"
to expect wide character strings.