私の 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 が返された場合、エラーが発生し、エラーが出力されます。さらに 2 つの有効なコマンドを入力すると、メモリ破損エラーが発生します...
ここで私が間違っていることを誰かが見ていますか?