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