for (i = 0; i < n_args; i++)
command = malloc (n_args * sizeof(char*));
должно стать просто
command = malloc (n_args * sizeof(char*))
потому что вы просто хотите выделить массив элементов n_args, а
while (arg != NULL)
{
arg = strtok(NULL, " \n");
command[i] = malloc ( (strlen(arg)+1) * sizeof(char) );
strcpy(command[i], arg);
i++;
}
должно стать:
arg = strtok(NULL, " \n");
while (arg != NULL) {
command[i] = malloc ( (strlen(arg)+1) * sizeof(char) );
strcpy(command[i], arg);
i++;
arg = strtok(NULL, " \n");
}
чтобы избежать strlen для нулевого указателя.