在我的 C 程序中,我使用 execvp 命令来解析输入并运行它。我有这个:
char read_str[MAX_ALLOWED_BUFFER];
pid_t child_pid;
char *strs[100] = {NULL};
child_pid = fork();
if (child_pid == 0) {
split(read_str, strs);
execvp(strs[0], strs);
printf("Failed\n");
}
else {
waitpid(child_pid, NULL, 0);
for (y = 0; y < 100; y++) free(strs[y]);
}
和这个功能
void split(char *str, char **splitstr) {
char *p;
int i=0;
p = strtok(str," ");
while(p!= NULL) {
splitstr[i] = malloc(strlen(p) + 1);
if (splitstr[i]) strcpy(splitstr[i], p);
i++;
p = strtok(NULL, " ");
}
}
第一个代码块处于 while 循环中并不断询问用户输入。无论如何,如果 execvp 返回,则发生错误并且打印失败,然后如果我再输入两个有效命令,则会出现内存损坏错误...
有谁看到我在这里做错了什么?