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

标签 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);
}

输出给我:

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' 看起来像一个错误,因为您将一个 char 分配给一个指向 char 的指针。

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

相关文章:

c - 指针的烦恼

c - C语言中如何比较两个指针的值

c - 实现一个简单的shell

c - 在 C 中使用数组的垃圾值

c - libcjson.so : cannot open shared object file: No such file or directory

c++ - fatal error comp.h 未找到 Netbean 8.0

c - 如果一个文件存储在硬盘中,为什么我们要用一个指针来创建它呢?

c - 从链表中删除元素时出现异常

c - 从c中的char数组向execvp添加参数

c - execvp() 不接受用户输入