gpt4 book ai didi

c++ - 如果输入字符串包含 "%",vsntprintf_s 会崩溃

转载 作者:行者123 更新时间:2023-11-28 06:03:11 25 4
gpt4 key购买 nike

我有一个错误记录机制,它使用 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”这样的格式字符串,因为这违反了格式字符串的规则。

如果你想打印那个确切的字符串,那么相应的格式字符串应该是“Test%%Test”。

如果字符串的内容不受您的控制,那么格式字符串应该只是“%s”,实际的字符串应该作为函数的下一个参数给出。

关于c++ - 如果输入字符串包含 "%",vsntprintf_s 会崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32884859/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com