2013-02-14 72 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");