vswprintf(VS 2008)期望%s在参数中转换为%ls

时间:2013-05-31 07:19:01

标签: c++ wchar-t wstring variadic-functions printf

我正在将格式化的字符串转换为单个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());

当我在线搜索时,我可以看到 Query in Stack Overflow

但即使是那个链接也没有解决方案。如何摆脱我将所有std :: strings转换为std :: wstrings的情况。实际转换是一项代价高昂的操作。

编辑: 发现“%S” - > Capital S,肯定有助于在vswprintf中打印char *。以下代码有效。

widePrint("Normal One: %S", normalStr.c_str());

但不幸的是“%S”在Mac上无法正常工作。是否有解决方法?

0 个答案:

没有答案