因此,我基本上具有与每个阵列1个参数的矢量ARGS,我试图传递给在UNIX的execv()调用。

Execv接受两个参数,如下所示:INT execv(常量字符*路径,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: ?????
有帮助吗?

解决方案

我觉得你的问题可能是你忽略了把一个空的数组的结尾。尝试这样:

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

其他提示

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top