在我到处寻找这个问题的答案的地方,我看到人们制作了一个大小为 2 的小 char * 数组,并在 execv 的路径中进行了硬编码。我需要做的是将带有路径的参数字符串作为第一组字符,将它们标记化,然后将它们放入 execv 将接受的 char *s 数组中。
这是我的标记化功能
char ** stringToVectorToCharArray(string inputString)
{
stringstream ss(inputString);
cout << "\n inputString is: " << inputString <<"\n";
vector<string> tokens;
tokens.clear();
while(ss >> inputString)
{
tokens.push_back(inputString);
}
int size = tokens.size();
char **args = new char*[size + 1];
int i = 0;
for(; i < size; i++)
args[i] = const_cast<char *>(tokens.at(i).c_str());
args[i + 1] = (char *) 0;
return args;
}
这被称为
char **args = stringToVectorToCharArray(inputString);
execv(executeChar, args);
在我的 fork() if-else 语句的 Child 部分中进行流控制。我收到一个 bad_alloc 错误,但我不确定我的哪些分配语句是正确的,如果有的话。我知道退货必须是表格
char *const argv[]
但我不确定如何设置。