const char *child_argv[10]; // this is actually a global variable
static const char *sExecute;
int I = 0;
const char *Value = argv[1];
sExecute = Value;
for (i=2; i<argc; i++) {
child_argv[I] = argv[i];
I++;
}
child_argv[I] = NULL; // terminate the last array index with NULL
这样我可以通过以下方式调用exec端:
execl(sExecute, child_argv);
然而,我收到错误消息&#34;错误:无法转换&#39; const char **&#39;到#char; char *&#39;争论&#39; 2&#39; to&#39; execl(const char *,const char *,...)&#39;&#34;。我甚至尝试过使用中间步骤:
const char *child_argv[10]; // this is actually a global variable
static const char *sExecute;
int I = 0;
const char *Value = argv[1];
sExecute = Value;
for (i=2; i<argc; i++) {
const char *Value = argv[i+1];
child_argv[I] = Value;
I++;
}
child_argv[I] = NULL; // terminate the last array index with NULL
但我无法解决这个问题。任何帮助将不胜感激!
更新
正如所指出的,我应该使用&#39; execv&#39;而不是&#39; execl&#39;在这种情况下。仍然有错误......
更新2
我最终复制了没有所需argv参数的数组。请参阅此处的帖子以查看结果How to copy portions of an array into another array
答案 0 :(得分:2)
从这里开始:http://linux.die.net/man/3/exec
我认为你的意思是将“execv”称为“execl”。 Execl似乎采用了可变数量的参数,期望每个const char *是另一个参数,而execv则采用一组参数。
答案 1 :(得分:0)
你应该使用execv。当你转换为execv时,由于某种原因,execv需要一个非const指针数组而不是const指针,所以你要么必须将数组转换为(char **),要么将字符串复制到(char *)指针中。 / p>