本人使用了一个pair,里面分别装了char*
其中第二行的值,需要将一个整形转换为char*,
本人定义了一个函数来实现,而且单独测试这个函数能够正常转换float,int 等,都是没问题的。
其中第二行的值,需要将一个整形转换为char*,
本人定义了一个函数来实现,而且单独测试这个函数能够正常转换float,int 等,都是没问题的。
template <class T> const char* translate(const T& value ) { ostringstream buffer(""); buffer <<fixed<< setprecision(6)<<value; string str = buffer.str(); return str.c_str(); }
pair<char*,const char*> common[2] =
{
make_pair(“name”,(“sketch”)),
make_pair(“summary”, translate(generalData->summary) )
}
标红色的是一个整数。
但是一旦放进pair里面,translate函数在 调试的时候就会出现 不正确的指针,无法计算表达式的值等错误。
pair里面最后无法得到正确的字符串值,
可是单独调用函数就可以啊。
解决方案
10
translate返回的字符串是 由buffer控制生存周期的,返回的是无效字符串
应改为返回std::string
pair第二个参数也是std::string
应改为返回std::string
pair第二个参数也是std::string
20
string str = buffer.str();
return str.c_str();
你的string对象在函数结束时就销毁了,返回的指针指向的内存也不在有效
return str.c_str();
你的string对象在函数结束时就销毁了,返回的指针指向的内存也不在有效
10
要拷贝呀!你返回的是临时对象
10
template <class T> std::string translate(const T& value ) { ostringstream buffer(""); buffer <<fixed<< setprecision(6)<<value; string str = buffer.str(); return str.c_str(); } pair<char*,std::string> common[2] = { make_pair("name",("sketch")), make_pair("summary", translate(generalData->summary) ) }