我有一个指针指向的字符串,我想将该字符串转换为双重类型数进行计算。但是,我不确定我的字符串是string
还是char*
以及我是否正确访问了指针指向的字符串。以下是我的代码:
void chatterCallback(const std_msgs::String::ConstPtr& msg)
{
ROS_INFO("I heard: [%s]", msg->data.c_str());
std::string str = msg->data;
ROS_INFO("I heard: [%s]", str.c_str());
double fmsg = std::atof(str.c_str());
ROS_INFO("I am making calculation: [%d]", fmsg+1.0);
}
无法识别double
类型,因此fmsg+1.0
会产生十位数字左右。有人可以帮忙吗?
答案 0 :(得分:1)
首先,由于您使用的是c_str
,因此您的字符串不能是char*
类型;最有可能的是std::string
。
此外,您不需要创建字符串的副本:std::string str = msg->data
是多余的(即使它没有伤害)。
至于你得到的糟糕输出 - Shashwat Kumar指出你的代码没有正确打印数字,即使数字本身是正确的。如果ROS_INFO
具有与printf
相同的语法,请使用%lf
或%f
格式说明符打印多个类型double
:
ROS_INFO("I am making calculation: [%f]", fmsg + 1);
(另外,无需将1
拼写为1.0
;如果您认为更好,则可能更喜欢1.0