我想初始化一個字符串向量,首先在一個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中的所有內容都是正確的。任何想法是什麼原因?
的初始化代碼是基於這篇文章:Initialize a vector array of strings
編輯: 移動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") };