题
因此,我基本上具有与每个阵列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指针被终止。
不隶属于 StackOverflow