我正在尝试做一些非常简单的事情:在一个字符**中填入我想在C中的execvp调用中使用的参数。
我就是这样做的:

 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一起玩,但没有成功。
当做

最佳答案

因为您确实++nargv,所以nargv指针最终指向数组的末尾。保留指向初始成员的指针并将其传递给exec。而且,*nargv++ = '\0'看起来像一个bug,因为您将一个char分配给一个指向char的指针。

关于c - char ** nargv为空,但不知道为什么,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2998580/

10-10 03:06