运行以下代码时,出现错误:“ 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;
}
感谢进阶!
答案 0 :(得分:3)
execvp
采用一个指针数组。您给它一个2D数组。它们是完全不同的野兽。对于初学者,赋予execvp
的指针数组必须以NULL
结尾。使用2D阵列是不可能的。