首页 > 解决方案 > 使用恒定大小的二维数组时出现“execvp 错误:地址错误”

问题描述

运行以下代码时出现错误:

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;
}

标签: cunix

解决方案


execvp接受一个指针数组。你给它一个二维数组。他们是完全不同的野兽。对于初学者,给定的指针数组execvp必须是-NULL终止的。使用二维数组是不可能的。


推荐阅读