我试图将字符串转换为const*char*以便能够调用库函数。我的代码如下:

// myVec is simply a vector<string>

vector<string> myVec;
/* stuff added to myVec
 * it is a vector of words that were seperated by whitespace
 * for example myVec[0]=="Hey"; myVec[1]=="Buck"; myVec[2]=="Rogers"; etc...
 */

char*const* myT = new char*[500]; //I believe my problem stems from here

for(int z=0; z<myVec.size(); z++) {
   string temp=myVec[z]+=" ";
   myT[z]=temp.c_str();
}
//execv call here

我正在为 execv() 的第二个参数构造它。

编译器总是会抛出各种错误,当我相互修复时,会弹出一个错误(似乎从我所使用的解决方案/ google-fu中看起来很循环)。

最佳答案

execv的签名期望参数数组指向可修改的C样式字符串。因此,与其他答案相反,c_str()并不是一个好主意。

尽管在C++ 03中不能保证,但事实是,我知道的所有std::string实现都将数据存储在连续的NULL终止的内存块中(这在C++ 11中得到保证),因此您可以将其用于您的优点:创建一个指向可修改字符数组的指针 vector ,使用输入 vector 中字符串的缓冲区初始化值,并将该数据块的地址传递给execv:

std::vector<char*> args;
args.reserve(myVec.size()+1);
for (std::vector<std::string>::iterator it=myVec.begin(); it != myVec.end(); ++it) {
   args.push_back(&((*it)[0]);
}
args.push_back(0);   // remember the null termination:

execv("prog", &args[0]);

关于c++ - 从字符串构造char * const *,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14960969/

10-10 21:38
查看更多