为什么使用ostringstream也会出现 “屯屯屯”

C++语言 码拜 8年前 (2017-04-11) 1172次浏览
本人使用了一个pair,里面分别装了char*
其中第二行的值,需要将一个整形转换为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

20

string str = buffer.str();
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) )
}

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明为什么使用ostringstream也会出现 “屯屯屯”
喜欢 (0)
[1034331897@qq.com]
分享 (0)