【发布时间】:2019-10-03 03:39:32
【问题描述】:
我正在尝试在 C 中制作一些什么 shell,但在制作 ls 命令时遇到问题。 mkdir 和 cd 工作正常,但 ls 它给了我
“地址越界分割错误”
希望有人可以帮助我。这是我的代码。
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <readline/readline.h>
#include <unistd.h>
#include <sys/wait.h>
int main() {
printf("\033[1;33mWelcome To Crisp Bacon Shell\n");
while (1) {
printf("\033[0m%s $", hostname);
input = readline("");
command = get_input(input);
child_pid = fork();
if (child_pid < 0) {
perror("Fork failed");
exit(1);
}else if (child_pid == 0) {
/* Never returns if the call is successful */
execvp(command[0], command);
printf("This won't be printed if execvp is successul\n");
} else {
waitpid(child_pid, &stat_loc, WUNTRACED);
}
free(input);
free(command);
}
return 0;
}
char **get_input(char *input) {
char **command = malloc(8 * sizeof(char *));
char *separator = " ";
char *parsed;
int index = 0;
parsed = strtok(input, separator);
while (parsed != NULL) {
command[index] = parsed;
index++;
parsed = strtok(NULL, separator);
}
command[index] = NULL;
return command;
}
我唯一了解它与内存和引用或指针有关,但我尝试将所有内容从 & refrencing 更改为指针,它只是给了我更多错误,我该怎么办?
【问题讨论】:
-
第一步:
while (parsed != NULL)-->while (parsed != NULL && index < (8-1))