Привет всем, я новичок в системном программировании, пожалуйста, подумайте, если мои сомнения очень расплывчаты.Системный вызов execvp не выполняется
Я на самом деле следую книге под названием Linux System Programming, и я сомневаюсь в системном вызове execvp(). Как указано в примере с книгой, я попробовал ее на своей машине, и вот следующий пример.
#include<unistd.h>
//int ret;
int main(){
const char *args[] = { "vi", "/home/kidd/hooks.txt", NULL };
int ret;
ret = execv ("/bin/vi", args);
if (ret == −1)
perror ("execvp");
}
И я получаю ошибку foolwing:
error: invalid conversion from ‘const char**’ to ‘char* const*’ [-fpermissive]
Я дал константный символьные массивы имя, которое, очевидно, Const символ **.
Почему это дает эту ошибку? **
Но я понимаю didnot аргумент типа logic.The должен быть константной символ ** как же строковые литералы внутри влияют на type.I'm C++ программист против меня, если ошибки , –
Тип, который вы хотите, это const * char *. Поскольку литералы имеют тип const char *, объявление типа массива const char * дает вам тип const char **. Поэтому вместо этого вы создаете массив char * для получения типа const * char *. http://linux.die.net/man/3/execvp http://stackoverflow.com/questions/12517983/c-what-is-the-datatype-of-string-literal – imareaver