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

How do I construct a string consisting of doubles and " " and then give it as const char* to a cMessage constructor?

我正在 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() return 是什么,我实际上得到了我想要的(看起来与上面的示例完全一样)。 但是:当我告诉程序执行下一步(在 return 处)时,它会将执行指针放回 std::stringstream ss;,屠杀之前那里的任何内容,直接跳过 ss << multibeam << " " << dopVelLog << " " << SubBotPro;然后 returns 是一个新形成的字符串(“\0”),因为黑暗的 c++ 魔法。求大神们帮帮我

这一行:

return ss.str().c_str();

你正在从一个 string 构造一个 const char * ,当你从函数 return 时它会死掉。这会在调用站点留下悬空指针。

相反,您可以 return 函数中的 string

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

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