0

我正在尝试做一些非常简单的事情:用我想在 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);
}

输出给了我:

nargv1 => --action       argv1 => backup
nargv2 => backup         argv2 => --help
nargv1 => backup         argv1 => --help
nargv2 => --help         argv2 => (null)
nargv3 => --help         argv3 => (null)
nargv4 => (null)         argv4 => (null)

这听起来不错(nargv 填充正确,至少我是这么认为的)> 但是当我执行 execvp("command",nargv) 时,我的参数没有通过。怎么了 ?我试图玩 gdb 没有成功。

问候

4

1 回答 1

5

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

于 2010-06-08T15:14:17.100 回答