从C ++字符串到char const *的奇怪不可靠转换

时间:2018-03-02 03:12:55

标签: c++ string c++11 ubuntu-16.04

将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 ++编译的。

有人可以向我解释一下我错过了什么吗?提前谢谢!

0 个答案:

没有答案