C++ _vsnprintf意外的格式字符串
问题描述:
我有一个日志记录函数,它接受可变数量的参数并使用_vsnprintf来格式化它们。我的问题是,当我调试我的OCR自动化它返回的字符串被发送到日志,所以如果该文件是这样说的:C++ _vsnprintf意外的格式字符串
此位图说%的正
那么它将获得发送到我的日志记录功能是这样的:
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);
}
有没有办法,随用随取的“%”,我可以检查是否有任何参数一起?谢谢。
答
不能printf的扩大,传统的方式,以确保东西
log("%s", yourString);
当然,你也可以添加log
一个变种,只需要一个参数,或者你可以指望的数量可变参数,如果没有,则不格式化字符串。
答
如果我正确理解你,你想检查实际传递给log()
的参数的数量。
不幸的是,这是高度机器特定的。我知道只有一个架构可以提供明确的论证数量。这是VAX。所有其他人都依靠主叫方和被叫方“做对”。
这就是'iostream'解决的问题。 – Puppy 2011-04-29 23:45:49