требуется справка по синтаксису execvpe argv для сопоставления параметров

#c #parameters #argv #execvp

#c #параметры #argv #execvp

Вопрос:

Я получаю «передаю аргумент 2 ‘execvp’ из несовместимого типа указателя» и
ожидаемый ‘char * const *’, но аргумент имеет тип ‘const char **’
Мне интересно, какой правильный синтаксис? Спасибо!

 
int main(int argc, const char* argv[]) {
  if(argv[0]!=NULL)
    return -1;
  int pid = fork();
  if(pid==0)
    execvp(argv[0],argv strlen(argv[0]));
  else
    wait();
  return 0;
}
  

Ответ №1:

exec функции не принимаются const char* . В вашем случае просто измените argv на char* , это правильный прототип.

Кстати. argv strlen(argv[0]) не имеет никакого смысла, что вы имели в виду под этим?

Комментарии:

1. Отлично! Похоже, простое удаление const исправило это! Однако, если я запускаю его, скажем, с emacs, он фактически не загружает его.

2. На самом деле, execl семейство принимает char const* , но execv варианты — нет. @Josh: const char* argv[] в любом случае, это не стандартный C.

3. @Let_Me_Be: да, это так. Они точно такие же.

4. @Josh Скорее всего, потому что argv strlen(argv[0]) это не имеет никакого смысла, ты имел в виду argv 1 ?

5. @Josh argv 1 есть amp;argv[1] . Поскольку a[b] определяется как *(a b)