初始化向量字符串数组时出错

咕ly

我试图通过首先在char *数组中初始化字符串向量并将它们转换为向量来初始化字符串向量。但是下面的代码不起作用,向量最终具有三个相同的第一字符串以及第四,第五和第六字符串。

string hand_lr_ = "left";
const char* x_joint_names_char[] = {("r2/"+hand_lr_+"_arm/wrist/yaw").c_str(),("r2/"+hand_lr_+"_arm/wrist/pitch").c_str(),("r2/"+hand_lr_+"_arm/hand/index/distal").c_str(),("r2/"+hand_lr_+"_arm/hand/ringlittle/ringMedial").c_str(),("r2/"+hand_lr_+"_arm/hand/ringlittle/ringDistal").c_str(),("r2/"+hand_lr_+"_arm/hand/ringlittle/ring").c_str() };

std::vector<std::string> x_joint_names(x_joint_names_char, x_joint_names_char + sizeof(x_joint_names_char)/sizeof(x_joint_names_char[0]));

for (int i =0; i < sizeof(x_joint_names_char)/sizeof(x_joint_names_char[0]) ;i++) {
  cout << x_joint_names[i] << endl;
  for (int j = 0; j < strlen(x_joint_names_char[i]); j++)
  {
    cout << x_joint_names_char[i][j];
  }
  cout << endl;
}

上面的代码输出以下内容。出现奇怪字符的地方。

r2/left_arm/wrist/yaw
8�{
r2/left_arm/wrist/yaw
r2/left_arm/wrist/yaw
r2/left_arm/wrist/yaw
r2/left_arm/wrist/yaw
r2/left_arm/hand/ringlittle/ringMedial
r2/left_arm/hand/ringlittle/ringMedial
r2/left_arm/hand/ringlittle/ringDistal
r2/left_arm/hand/ringlittle/ringDistal
r2/left_arm/hand/ringlittle/ring
r2/left_arm/hand/ringlittle/ring

如果只有五个字符串,该代码将正常工作。如果我不将数组分配给向量,它也看起来很正常。分配给向量之前,x_joint_names_char中的所有内容都是正确的。知道是什么原因吗?

初始化代码基于此文章:初始化字符串的向量数组

编辑:将hand_lr移入字符串,如下所示。

const char* x_joint_names_char[] = {("r2/left_arm/wrist/yaw"),("r2/left_arm/wrist/pitch"),("r2/left_arm/hand/index/distal"),("r2/left_arm/hand/ringlittle/ringMedial"),("r2/left_arm/hand/ringlittle/ringDistal"),("r2/left_arm/hand/ringlittle/ring") };
毫米

行初始化将x_joint_names_char创建一堆悬空的指针。

该表达式("r2/"+hand_lr_+"_arm/wrist/yaw")表示一个临时字符串(因为它没有名称并且没有动态分配)。c_str()函数生成一个指向临时字符串的指针,但是该行完成时,该行上的临时字符串将全部销毁。

使用char *中的链接线是当初始化是C风格的字符串文字只能使用一个微型优化。

从C ++ 11开始,您可以编写:

std::vector<std::string> x_joint_names = {
    "r2/"+hand_lr_+"_arm/wrist/yaw",
    "r2/"+hand_lr_+"_arm/wrist/pitch",
    "r2/"+hand_lr_+"_arm/hand/index/distal"
};

例如。如果您被迫使用旧的编译器,则使您的基本数组为的数组string,而不是的数组const char *或将push_back每个字符串放入向量中,并删除数组。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用字符串字符数组初始化字符串时出错?

是否可以从数组初始化字符串向量?如果是这样,怎么办?

字符数组的初始化字符串太长C

用字符串变量初始化字符数组

使用字符串文字初始化数组时的不同汇编

初始化指针时的字符串文字与char数组

初始化枚举中的字符串数组

Jasmin字符串声明/初始化错误数组

在Rust中初始化字符串数组

从字符串数组初始化pydantic Literal

在C中动态初始化字符串数组

用\ 0初始化字符串数组

通过默认字符串简化向量中字符串的初始化

初始化ViewController时传递字符串

从字符串向量初始化2d数组的最简单方法是什么?

使用标量初始化程序初始化字符串数组

当使用字符串文字初始化字符数组时,数组表达式不会转换为指针

从字符串数组资源初始化字符串数组

比较向量元素和字符串元素而不初始化向量

在 C++ 中初始化字符串向量的向量

使用字符串调用方法时出错:类型'size_t&的非常量引用的无效初始化

代码帮助-使用扫描仪初始化字符串数组。显示时,数组值全部为空白

零初始化字符串和字符串数组(C ++)

字符串初始化差异

从字符串初始化单元

将初始化向量作为引用传递时出错

初始化具有大小的对象的向量时出错

在初始化指针数组时,为什么只有字符串不显示警告?

如何最好地初始化C ++中的字符串向量?