char**nargv是空的但不知道为什么

Xav*_*ard 0 c pointers execvp

我正在尝试做一些非常简单的事情:用C中的execvp调用中的参数填充char**.

这就是我在做的事情:

 if(argc >=1)
    {
      *nargv = "--action";
      while(argc--)
        {
          printf("nargv1 => %s \t argv1 => %s \n", *nargv, *argv);
          *++nargv = *argv++;
          printf("nargv2 => %s \t argv2 => %s \n", *nargv, *argv);
        }

      printf("nargv3 => %s \t argv3 => %s \n", *nargv, *argv);
      *nargv++ = '\0';
      printf("nargv4 => %s \t argv4 => %s \n", *nargv, *argv);
}
Run Code Online (Sandbox Code Playgroud)

输出给了我:

nargv1 => --action       argv1 => backup
nargv2 => backup         argv2 => --help
nargv1 => backup         argv1 => --help
nargv2 => --help         argv2 => (null)
nargv3 => --help         argv3 => (null)
nargv4 => (null)         argv4 => (null)
Run Code Online (Sandbox Code Playgroud)

听起来不错(nargv填写正确,至少这是我的想法)>但是当我执行execvp("命令",nargv)时,我的论点没有通过.怎么了 ?我试图使用gdb但没有成功.

问候

Jou*_*nen 5

既然你做++nargv,你nargv指针最终指向过去的数组的末尾.保留指向初始成员的指针并将其传递给exec.此外,*nargv++ = '\0'看起来像一个错误,因为您将char指定给char指针.

  • 它的'喜欢这个 - 如果你从p = top开始并循环p ++然后在循环结束时p将指向列表的*end*,而不是开头.你需要通过开头即顶部而不是p. (2认同)