const char数组*

4 c++

我正在编写一个使用RRD库的C++程序,这些库需要一个'const char*'数组来实现它们的功能.我以为我可以声明数组,然后初始化数组的每个元素,但更改一个,更改所有元素.显然我错过了一些东西.这是一个类似于我正在编写的代码的示例(即它表现出相同的问题).

string intToString(long i)
{
    stringstream ss;
    string s;
    ss << i;
    s = ss.str();
    return s;
}

int main(){
        const char* av[5];
        int i = 0;
        int j = 0;
        for(i=0;i<5;i++){
                j= 0;
                av[i] = intToString(i).c_str();
                for(j=0;j<5;j++){ cout << j << " : " << av[j] << endl;}
        }   

}
Run Code Online (Sandbox Code Playgroud)

任何帮助,将不胜感激.

CB *_*ley 8

const char*由返回c_str()一个的方法std::string点所拥有的一个缓冲区std::string,只有保持有效,直至到的一个不同诱变方法的调用std::string.如果要保留此缓冲区的内容,则需要将其内容复制到其他位置.

编辑:或者,您可以保留一个数组std::string来管理字符串的存储,并将c_str()指针临时存储const char*在接口所需的并行数组中.这样就不需要复制字符串或手动取消分配副本.在任何情况下,重要的std::string是在保持const char*先前调用返回的值时不要更改任何内容c_str().


Kir*_*sky 6

string::c_str返回临时指针.您可以使用strdup获取持久性指针.

// don't forget to release memory later
av[i] = strdup( intToString(i).c_str(); ); 
Run Code Online (Sandbox Code Playgroud)

或者您可以手动分配所有缓冲区,然后用于string::copy复制字符串数据.