1
我得到一个错误的指针(0xcccccccc),用于临时的异常下面下壳体的':C++ - va_list的错误指针
string Logger::format(const char *str, va_list args)
{
ostringstream output;
for(int i = 0; i < strlen(str); ++i)
{
if(str[i] == '%' && str[i+1] != '%' && i+1 < strlen(str))
{
switch(str[i+1])
{
case 's':
{
char *temp = va_arg(args, char*);
output << temp;
break;
}
case 'i':
{
int temp = va_arg(args, int);
output << temp;
break;
}
case 'd':
{
double temp = va_arg(args, double);
output << temp;
break;
}
case 'f':
{
float temp = va_arg(args, float);
output << temp;
break;
}
default:
output << str[i];
}
i++;
}
else
{
output << str[i];
}
}
return output.str();
}
上述功能是通过此称为:
void Logger::debugFormat(string message, ...)
{
const char* cstr = message.c_str();
va_list args;
va_start(args, cstr);
record(DEBUGGING, format(cstr, args));
va_end(args);
}
我打电话的这种方式在我所有的代码
Logger::debugFormat("Loading Image %s", path.c_str());
任何其他类型(INT,双,浮法)上述工作的所有罚款。任何帮助表示赞赏。
你在哪里创建va_list?你需要在调用va_arg之前在某处调用va_start – 2012-07-06 23:35:03
我很困惑,为什么你不只是使用'sprintf'而不是重新发明轮子。如果您要重塑它,请通过可变模板使用类型安全版本。上面固定的 – chris 2012-07-06 23:39:25
。那么这是一个记录器。我可以通过重定向cout来将printf设置为打印到文件而不是控制台? – will 2012-07-06 23:40:24