1

我正在将格式化的字符串转换为单个 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 中不能正常工作。有什么解决方法吗?

4

0 回答 0