我正在将格式化的字符串转换为单个 wchar_t*。当我有一个包含 %s 的流时,vswprintf 不会从该格式化字符串中形成预期的 wchar_t*。这仅在 Windows(VS 2008)中发生,但在 Mac(XCode 3.2.6)中运行良好
例如,
我的格式化功能:
void widePrint(const wchar_t* fmt, ...) {
va_list args;
va_start(args, fmt);
wchar_t buf[32*1024] = {0};
vswprintf(buf,(32*1024 - 1),fmt, args);
...//Prints buf
...
}
这在 Windows 中不起作用,但在 Mac 中运行良好
std::string normalStr = "test Str";
std::wstring wideStr = L"wide test Str";
widePrint("Normal One: %s and Wide One: %ls", normalStr .c_str(), wideStr .c_str());
但是如果我将 %s 转换为 %ls,我的意思是将 std::string 转换为 std::wstring 当然也适用于 Windows
std::string normalStr = "test Str";
std::wstring normalStrW(normalStr .begin(), normalStr .end());
std::wstring wideStr = L"wide test Str";
widePrint("Normal One: %ls and Wide One: %ls", normalStrW.c_str(), wideStr .c_str());
当我在网上搜索时,我可以在 Stack Overflow 中看到这个 Query
但即使那个链接也没有解决方案。如何摆脱我将所有 std::strings 转换为 std::wstrings 的这种情况。事实转换是一项昂贵的操作。
编辑:发现 "%S" -> Capital S 肯定有助于在 vswprintf 中打印 char* 。下面的代码有效。
widePrint("Normal One: %S", normalStr.c_str());
但不幸的是,“%S”在 Mac 中不能正常工作。有什么解决方法吗?