将C ++字符串转换为const char *字符串时发生不可靠的转换。
const char *字符串可能会被破坏,具体取决于存储在C ++字符串中的字符串文字以及范围(I.E“标签#”有效,但不是“Quadricopter_target#”)
void myfunction(){
int i;
for(i=0; i<5; i++){
const char* label;
//Calculate target handle name
if(i==0)
label= "Quadricopter_target";
else{//append a number to the label in additional instances
string stringname = "Quadricopter_target#" + to_string(i-1);
label = stringname.c_str();
//this cout output does not get corrupted
cout << "Label text: " << label << endl;
}
//this cout output gets corrupted
cout << "Label text: " << label << endl;
}
使用“Quadricopter_target#”输出:
标签文字:Quadricopter_target
标签文字: Q
标签文字: Q
标签文字: Q
标签文字: Q
使用“label#”输出:
标签文字:标签
标签文字:标签#0
标签文字:标签#1
标签文字:标签#2
标签文字:标签#3
这是使用C ++ 11在Ubuntu 16.04上使用g ++编译的。
有人可以向我解释一下我错过了什么吗?提前谢谢!