【发布时间】:2011-05-10 03:42:19
【问题描述】:
_vsnprintf 什么时候会崩溃?
我是这样使用的:
void My_Printf(const char *szFormatString, ...)
{
va_list my_args;
va_start(my_args, szFormatString);
AppendToLog(szFormatString, my_args);
va_end(my_args);
}
static void AppendToLog(const char *szFormatString, va_list argptr)
{
char szLine[MAX_LENGTH_STRING] = {0};
if ((NULL != szFormatString) && (0 != strcmp(szFormatString, ""))) {
if (strlen(szFormatString) > MAX_LENGTH_STRING) {
return;
}
#ifdef WIN32
_vsnprintf(szLine, MAX_LENGTH_STRING-1, szFormatString, argptr);
#endif
...
}
并且 VC 显示它在以下位置被破坏:
_VALIDATE_RETURN( (ch != _T('\0')), EINVAL, -1); (输出.c)
我不知道为什么。
根据MSND,无论是否正常,它都应该返回一个值。
【问题讨论】:
-
发布您的全部代码,我们不是通灵者。
szFormatString和argptr是什么? -
首先要检查:
szLine是否真的指向一个 MAX_LENGTH_STRING 个字符的缓冲区? -
你是如何创建 va_list 函数参数的?
标签: printf