c - 使用恒定大小的二维数组时出现“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;
}
解决方案
execvp
接受一个指针数组。你给它一个二维数组。他们是完全不同的野兽。对于初学者,给定的指针数组execvp
必须是-NULL
终止的。使用二维数组是不可能的。
推荐阅读
- go - golang http server 拖尾日志 kubeapi 代理
- python - 如何使用beautifulSoup提取html5元素如
- python - 使用 isalpha() 替换文本中的字符
- html - 需要帮助以 HTML 和 SCSS 显示图像
- sql-server - 查询完成后立即删除临时表
- ruby - Ruby - 当键可能是字符串或进一步的哈希时安全导航哈希
- airflow - 使用 Pub/Sub 消息触发 Cloud Composer DAG
- visual-studio-2019 - Visual Studio 2019 - 发布到文件夹不会发布所有文件
- python - 你如何使用 gcloud 的多 CPU 来加速你的 Python 程序?
- string - 未找到 str 的匹配方法