我如何构造一个由双精度和 " " 组成的字符串,然后将其作为 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 *
。
我正在 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 *
。