Я пытаюсь инициализировать вектор строк, сначала инициализируя его в массиве 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
Edit: Перемещение 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") };