char ** nargv пусто но не знаю почему - PullRequest
0 голосов
/ 08 июня 2010

Я пытаюсь сделать что-то довольно просто: заполните char ** аргументами, которые я хочу использовать в вызове execvp в C.

Вот как я делаю:

 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 ("команда", nargv), мои аргументы не передаютсячерез.В чем дело ?Я пытался играть с GDB без успеха.

С уважением

1 Ответ

5 голосов
/ 08 июня 2010

Поскольку вы делаете ++nargv, ваш указатель nargv заканчивается указателем за концом массива. Сохраните указатель на начальный член и передайте его exec. Кроме того, *nargv++ = '\0' выглядит как ошибка, так как вы назначаете char указателю на char.

...