如何构造由双打和“”组成的字符串,然后将其作为const char *给予cMessage构造函数?

时间:2020-08-09 13:30:46

标签: c++ omnet++

我正在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。拜托,巫师,帮帮我。

1 个答案:

答案 0 :(得分:1)

在这一行:

return ss.str().c_str();

您正在从const char *构造一个string,该函数在您从函数返回时将消失。这样会在呼叫站点留下悬空的指针。

相反,您可以从函数中返回string

std::string Provider::getSensor() {
  // ...
  return ss.str();
}

然后您可以在调用站点上对返回的字符串调用c_str(),并使用在此获得的const char *

相关问题