boost::format 和 wchar_t

发布于 2025-01-07 23:26:17 字数 564 浏览 1 评论 0原文

我正在尝试使用 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

故事灯 2025-01-14 23:26:17

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

Try using boost::wformat to work with wchar_t strings.

陪我终i 2025-01-14 23:26:17

您可以按照 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 the l is the letter ell, small L.) This modifies the "%s" to expect wide character strings.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文