使用恒定大小的二维数组时出现“ execvp错误:错误的地址”

时间:2019-01-18 01:51:10

标签: c unix

运行以下代码时,出现错误:“ execvp错误:错误的地址”。我不确定为什么会这样,但是我怀疑应该将cmd [2]设置为NULL指针。我不知道如何为恒定大小的二维数组设置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 :(得分:3)

execvp采用一个指针数组。您给它一个2D数组。它们是完全不同的野兽。对于初学者,赋予execvp的指针数组必须以NULL结尾。使用2D阵列是不可能的。