Получение «execvp error: Bad address» при использовании 2D-массива постоянного размера - PullRequest
0 голосов
/ 18 января 2019

При запуске следующего кода я получаю сообщение об ошибке: «execvp error: Bad address».Я не уверен, почему это так, но я подозреваю, что cmd [2] должен быть установлен в NULL-указатель.Я не мог понять, как установить нулевой указатель для двумерного массива постоянного размера.: /

#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>

int main(void) {

    char cmd[10][10];
    strcpy(cmd[0], "ls");
    strcpy(cmd[1], "-1");

    int pid = fork();

    // child process
    if (pid == 0){

        execvp(cmd[0], (char *const *) cmd); 
        perror("execvp error"); 

    // parent process
    } else if (pid > 0){
        wait(NULL);

    // fork failure
    } else {
        perror("Child creation unsuccessful");

    }

    return 0;
}

Спасибо заранее!

1 Ответ

0 голосов
/ 18 января 2019

execvp принимает массив указателей. Вы даете ему 2D-массив. Это совершенно разные звери. Для начала массив указателей, заданных для execvp, должен быть NULL -определенным. С 2D-массивом это невозможно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...