0

我有以下代码:

int main(void) {
    char in[100];
    printf("> ");
    fgets(in, sizeof(in), stdin);
    int pid;
    char *f[100];
    char *v;
    int i = 1;
    v = strtok(in, " ");
    f[0] = v;
    while (v = strtok(NULL, " ")){
        f[i] = v;
        i++;
    }
    f[i] = NULL;
    execvp(f[0], f);
    perror("FAILED");
    exit(1);
}

出于某种原因,每当我输入“ls -l”或“日期”之类的内容时,它都会告诉我没有这样的文件或目录。当我在代码中写道:

f[0] = "ls";
f[1] = "-l";
f[2] = NULL;

它工作得很好。有任何想法吗?

4

2 回答 2

3

您的代码中有一个小错误。这是关于 fgets 函数的使用。当您使用 fgets 时,将整个给定的输入连同换行符一起带入字符串 v。只需在 fgets 函数后添加以下两行,您的代码就可以正常工作。

int size = strlen(in);
in[size-1] = '\0';

这只是为了从字符串中删除换行符。

因此,当您按 ls -l[ENTER] 时。ls 在第一个单词 f[0] 中使用,-l'\n' 在 f[1] 中使用,execvp 无法使用 ls -l'\n' 找到和执行

于 2013-02-14T04:31:00.543 回答
0

尝试:

char* str;
str = strtok(inputBuffer," \n");
于 2016-06-17T01:24:38.223 回答