Illegal Argument Execv()Unix C ++

时间:2009-10-07 02:56:15

标签: c++ linux execv

所以我基本上有一个向量args,每个数组有一个参数,我试图传递给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: ?????

2 个答案:

答案 0 :(得分:5)

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

char * arg[args.size()+1];
arg[args.size()] = NULL;
for (int j=0; [...]

答案 1 :(得分:1)

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