我有一个具有以下功能体的可变参数 -
char * ReturnMessage1(const char *format,...)
{
va_list vl;
int i = 0;
std::stringstream ss;
va_start( vl, format );
switch( format[i] ) { // Type to expect.
case 'i':
{
int ii = va_arg(vl, int );
ss << ii;
}
break;
case 'f':
{
double f = va_arg(vl, double );
ss << f;
}
break;
case 'c':
{
char c = va_arg(vl, char );
ss << c;
}
break;
case 's':
{
char * str = va_arg(vl, char * );
ss << str;
}
break;
default:
break;
}
va_end( vl );
return const_cast<char*>(ss.str().c_str());
}
现在我希望变量sis编译所有参数并形成一个字符串语句并返回它。 BUt它返回一个垃圾字符串。我哪里出错?
答案 0 :(得分:2)
在函数返回后,您返回的指针无效,因为它指向的对象是函数体的本地对象,并在您离开函数时死亡。
您需要一个动态字符串,最好使用现成的std::string
类:
std::string ReturnMessage1(const char *format,...)
{
std::ostringstream ss;
//
return ss.str();
}