execvp()不接受用户输入

时间:2013-02-14 04:03:25

标签: c strtok execvp

我有以下代码:

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”或“date”之类的东西,就会告诉我没有这样的文件或目录。当我在代码中写道时:

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

它工作正常。有什么想法吗?

2 个答案:

答案 0 :(得分: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'

答案 1 :(得分:0)

尝试:

char* str;
str = strtok(inputBuffer," \n");