我正在OMNet ++中进行仿真。我想在消息中发送多个double值,如下所示:“ 0.005044 0.345209 0.032458”
为此,我生成了3个double值,然后将它们转换为stringstream。然后我通过str()将此字符串流转换为字符串,并将该字符串转换为const char *:
const char* Provider::getSensor() {
double multibeam, dopVelLog, SubBotPro;
multibeam = uniform(0.0,1.0);
dopVelLog = uniform(0.0,1.0);
SubBotPro = uniform(0.0,1.0);
std::stringstream ss;
ss << multibeam << " " << dopVelLog << " " << SubBotPro;
return ss.str().c_str();
}
在您实际执行之前,这似乎效果很好。我在其中撒了一些临时值,这样我就可以在调试器中看到str()和c_str()返回了什么,而实际上得到了我想要的(看起来与上面的示例完全一样)。
但是:当我告诉程序进行下一步(返回时)时,它将执行指针返回到std::stringstream ss;
,屠夫之前的内容,跳到ss << multibeam << " " << dopVelLog << " " << SubBotPro;
上,然后返回新生成的字符串(“ \ 0”),因为深色的c ++-magic。拜托,巫师,帮帮我。
答案 0 :(得分:1)
在这一行:
return ss.str().c_str();
您正在从const char *
构造一个string
,该函数在您从函数返回时将消失。这样会在呼叫站点留下悬空的指针。
相反,您可以从函数中返回string
:
std::string Provider::getSensor() {
// ...
return ss.str();
}
然后您可以在调用站点上对返回的字符串调用c_str()
,并使用在此获得的const char *
。