1

所以我基本上有一个向量 args,每个数组有 1 个参数,我试图将其传递给 unix 中的 execv() 调用。

Execv 接受两个参数,如下所示: int execv(const char *path, char *const argv[]);

将我的字符串向量转换为指针数组的最佳方法是什么?现在我正在执行以下操作,但是当我运行它时说,ps -a -f,ps 对我大喊大叫说非法参数。任何帮助表示赞赏。

vector<string> args = tokenize(cmd);
char * arg[args.size()];
for(int j=0; j<args.size();j++)
{
        arg[j] = (char*)args[j].c_str();    
}
retval = execv(args[0].c_str(), arg);

.

>ps

  PID TTY           TIME CMD
  635 ttys000    0:00.18 -bash
16106 ttys000    0:00.00 ./test cpp
12590 ttys001    0:00.02 -bash
>ps -a

ps: illegal argument: ?????
4

2 回答 2

5

我认为您的问题可能是您忽略了在数组末尾放置一个 NULL 。试试这个:

char * arg[args.size()+1];
arg[args.size()] = NULL;
for (int j=0; [...]
于 2009-10-07T03:00:09.080 回答
1

execv 函数提供了一个指向以空字符结尾的字符串的指针数组,这些字符串表示新程序可用的参数列表。按照惯例,第一个参数应该指向与正在执行的文件关联的文件名。指针数组必须以 NULL 指针终止。

于 2009-10-07T03:12:06.463 回答