我正在将格式化的字符串转换为单个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上无法正常工作。是否有解决方法?