_vsnwprintf_s 在遇到%的时候,出现了Expression: ("Incorrect format specifier", 0)的提示错误!
测试代码如下:
#include <Windows.h>
#include <string>
//printLogW
void printLogW(const wchar_t* szLog, ...)
{
wchar_t cMsg[5120];
::memset( cMsg, 0, 5120 );
std::wstring wszContent = L"";
try
{
va_list argList;
va_start( argList, szLog );
_vsnwprintf_s( cMsg, sizeof( cMsg ), szLog, argList );
va_end( argList );
wchar_t buf[8192];
swprintf_s(buf, 8192, L"tid[%d] : %s", GetCurrentThreadId(), cMsg);
wszContent = buf;
}
catch (...)
{
}
wprintf(L"%s\r\n", wszContent.c_str());
}
int main()
{
//std::wstring szTemp = L"AAAA2BQFWAVi2cNQAAACAmfbxaOSUtejJlrmwqdr7MPmXU3e";
std::wstring szTemp = L"AAAA2BQF%2WAVi2cNQAAACA%2Fg5Qxwiwf6k%2BP%2BVW9%2";
printLogW(szTemp.c_str());
system("pause");
return 0;
}
_vsnwprintf_s 内部在处理%字符的时候会进行转义,当%后面跟着的字符,不符合规范的时候,就会提示上述错误了!
一般来说,%d、%f、%s等是可以被识别的,但是代码中%后面跟着的不是这些。所以就出bug了!
如果说,这是一段需要打印出来的日志,咋整?
可以使用字符串的查找替换,将单独的%,替换成%%,就可以了!