我有一个错误记录机制,它使用vsntprintf_s
构造一个缓冲区。
不幸的是,如果它看到"%"
符号,那么在构造缓冲区时会出现异常。
TCHAR szBuffer[2000];
if (lpszFormat != NULL)
_vsntprintf_s(szBuffer, _countof(szBuffer), lpszFormat, args);
整体功能 -
bool someFunction::TraceLog (LPCTSTR lpszFormat, ...)
{
va_list args = nullptr;
va_start (args, lpszFormat);
TCHAR szBuffer[2000];
if (lpszFormat != NULL)
_vsntprintf_s(szBuffer, _countof(szBuffer), lpszFormat, args);
else
_tcsncpy_s (szBuffer, _T("NULL format for TraceGen"), _TRUNCATE);
}
其中,如果输入字符串lpszFormat
包含'%'它失败。 "%"
并不是一个操作符,而是字符串本身的内容。例如。 Test%Test
处理此问题的最佳方法是什么?
答案 0 :(得分:1)
处理此问题的最佳方法是始终在您的控制下使用格式字符串(我指的是您编写的代码)。您不能拥有类似“Test%Test”的格式字符串,因为这违反了格式字符串的规则。
如果要打印那个确切的字符串,那么相应的格式字符串应为“Test %% Test”。
如果字符串的内容不在您的控制之下,那么格式字符串应该只是“%s”,实际的字符串应该作为函数的下一个参数给出。