Я пытаюсь запустить execvp, используя данные из типа char [] [] (также известный как массив строк). Теперь я знаю, что execvp()
берет указатель на строку в качестве своего первого параметра, а затем указатель на массив строк в качестве второго - на самом деле я даже использовал его успешно раньше как таковой - однако я не могу получить правильную комбинацию указатели & строки, чтобы заставить его работать ниже - все, что я пробовал, считается несовместимым!Запуск execvp из параметра 2D-массива
Любая помощь очень благодарна :) - Я удалил свои заголовки, чтобы немного сжать код!
struct userinput {
char anyargs[30][30]; //The tokenised command
};
int main() {
struct userinput input = { { { 0 } } }; //I believe is valid to set input to 0's
struct userinput *inPtr = &input; //Pointer to input (direct access will be unavailable)
strcpy(inPtr->anyargs[0], "ls"); //Hard code anyargs to arbitary values
strcpy(inPtr->anyargs[1], "-lh");
char (*arrPointer)[30]; //Pointer to an array of char *
arrPointer = &(inPtr->anyargs[0]);
printf("arrPointer[0]: %s, arrPointer[1]: %s\n", arrPointer[0],
arrPointer[1]);
printf("At exec case; ");
execvp(arrPointer[0], arrPointer);
perror("Command not recognised"); //Prints string then error message from errno
return 0;
}
Вы пробовали 'arrPointer = (inPtr-> anyargs);' without &? – Christophe
Да - исправьте меня, если я ошибаюсь - оператор -> de-ссылки и возвращает значение, которое мы не хотим, поскольку arrPointer и execvp не принимают значения напрямую - они принимают указатели на значения? – davidhood2