2013-02-14 160 views
0

我有以下代码: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命令”或“日期”输入,它告诉我没有这样的文件或目录。当我在代码中写道:

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

它工作正常。有任何想法吗?

回答

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'

+0

是的,那是固定的。非常感谢! – me45 2013-02-14 04:33:49

0

尝试:

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