我正在尝试将字符串转换为a 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
Run Code Online (Sandbox Code Playgroud)
我正在为第二个参数构建它execv().
编译器总是抛出各种错误,当我互相修复时会弹出一个(从我使用的解决方案/ google-fu看起来相当圆形).
的签名execv预计的参数数组指向modifyable空调风格的字符串.所以与其他答案所暗示的相反,c_str()并不是一个好主意.
虽然在C++ 03中没有保证,但事实是std::string我知道的所有实现都将数据存储在连续的NULL终止内存块中(这在C++ 11中得到保证),因此您可以利用它:创建一个指向可修改字符数组的指针向量,使用输入向量中字符串的缓冲区初始化值,并将该数据块的地址传递给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]);
Run Code Online (Sandbox Code Playgroud)