execvp 不执行用户输入给出的命令

execvp not executing commands given by user input

我正在尝试执行用户输入给出的命令行,但出于某种原因 execvp() 函数未执行该命令。我读入用户输入并将其拆分,将其存储到一个数组中并使用 excevp() 函数来执行它。我什至打印出阵列中的点,以确保它把令牌放在正确的位置,而且确实如此。这是我在 C

中的代码
char b[100];
int i = 0;
char *token;
char *array[3];
printf("Please enter the command you want to use: ");
fgets(b, 100, stdin);
token = strtok (b, " ");
while (token != NULL){
    array[i++] = token;
    printf("%s\n",token);
    token = strtok(NULL, " ");
}

printf("%s", array[0]);
printf("%s", array[1]);
execvp(array[0], array);

因此,例如,如果我在程序的命令行中输入“ls”并按回车键,它将转到下一行,不会执行任何内容。是否有任何解决此问题的建议,因为我不知道从哪里开始?

问题是 array[0]ls\n(因为 fgets 也读取换行符)而不是 ls 您还必须删除 \n .

您可以像这样简单地创建一个分隔符数组:

char delimiters[] = " \t\n";

然后简单地做

 token = strtok(b, delimiters); // Use delimiters instead of only " " (whitespace)
  while (token != NULL) {
    array[i++] = token;
    printf("%s\n", token);
    token = strtok(NULL, delimiters); // Use delimiters instead of only " " (whitespace)
  }