我有一个记录函数,它接受可变数量的参数并使用_vsnprintf格式化它们。我的问题是,当我调试我的OCR自动化时,它返回的字符串被发送到日志,所以如果文件说的是这样的话:
此位图显示%n
然后它将被发送到我的日志记录功能:
void log(LPCSTR msg, ...)
{
char log[MAX_ALLOWED];
int length = sizeof(log) / sizeof(log[0]);
va_list argptr;
va_start( argptr, pzMsg );
// our msg accidentally has a %
if ( strchr(msg, '%') ) {
// debug assertion - no parameters were passed
_vsnprintf( log, length, msg, argptr );
}
log[length-1] = (char)0;
va_end( arg_ptr );
}
有没有办法,以及检查'%',我可以检查是否没有参数?谢谢。
答案 0 :(得分:1)
确保无法通过printf扩展某些内容的传统方法是
log("%s", yourString);
当然,您也可以添加log
的变体,只需要一个参数,或者您可以计算变量参数的数量,如果没有则可以格式化字符串。
答案 1 :(得分:1)
如果我理解正确,您想检查实际传递给log()
的参数数量。
不幸的是,这是高度机器特定的。我只知道一个提供明确的参数计数的架构。这就是VAX。所有其他人都依赖于来电者和被叫者来“正确行事”。