如何构造一个由双精度和 " " 组成的字符串,然后将其作为 const char* 提供给 cMessage 构造函数?



我正在OMNet++中进行模拟。我想在消息中发送多个双精度值,如下所示:"0.005044 0.345209 0.032458">

为此,我生成 3 个双精度值,然后将它们转换为字符串流。然后我通过 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++ 魔法。巫师们,请帮帮我。

在这一行:

return ss.str().c_str();

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

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

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

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

最新更新