无法转换' const char **'到#char; char *'

时间:2015-08-26 14:39:46

标签: c++ arrays char

大家早上好!我正在尝试通过传递的' -e'从父程序创建一个fork / exec调用。参数(例如,父-e子键1 = val1 ...)。因此,我想将argv数组中前两个之后的所有值复制到一个新数组child_argv中。类似的东西:

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

2 个答案:

答案 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>