#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)