以下几行都“按预期工作”:
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/