c++ - 在 C++Builder 中使用 swprintf 打印窄字符串

标签 c++ windows printf c++builder widestring

以下几行都“按预期工作”:

wchar_t u[50], v[50];

swprintf(u, 50, L"%s", L"hello");
swprintf(v, 50, L"%ls", L"goodbye");

MessageBoxW(NULL, u, v, MB_OK);   // output: MessageBox showing "hello" and "goodbye"

有没有办法打印窄字符串,这方面的文档在哪里?例如

swprintf(u, 50, L"%?", "hello");

C++ 标准指定(引用 C 标准)在 wprintf 函数系列中,%s 指定 char 字符串>(多字节编码,例如 UTF-8),%ls 指定 wchar_t 字符串。

因此 RTL(C++Builder 提供的运行时库实现)显然不符合标准。

背景:我实际上正在尝试使用 UnicodeString::sprintf,但是这将繁重的工作委托(delegate)给了 vswprintf

最佳答案

这并不是真正的答案,而是更多元素的汇编。

引用:

网站http://www.cplusplus.com/很清楚:对于 wprintf 系列:...所有格式说明符与 printf 中的含义相同;因此,%lc 应用于写入宽字符(而不是 %c),并且 %ls 应用于宽字符串(而不是 %s)

实现:

gcc 和 clang 都符合上述规范

MSVC 和根据 OP Borland C++ 不符合并接受宽字符串的 %s

关于c++ - 在 C++Builder 中使用 swprintf 打印窄字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27920229/

相关文章:

c++ - 你如何处理 C++ 中的字符串?

linux - Jenkins (linux) 和 EnvInject on node (Windows) 文件访问

python - 如何打印整个父-节点-子结构

c - 调用 printf() 时出现 EXC_BAD_ACCESS

c++ - va_list 和省略号之间的重载分辨率因字面值而异。为什么?

c++ - Qt - 没有匹配的功能来调用连接

windows - 在 Windows x64 上构建 OpenJDK8

c - fprintf 的错误

c++ - OpenGL 和 QtQuick 纹理问题

Windows 计划任务不适用于 PHP 脚本