2013-05-04 110 views
1

我試圖使用chdir()函數,但無法實現它。C - 使用chdir()函數

我正在閱讀用戶,並確定他是否使用「cd」。 我總是得到一個錯誤。 我在做什麼錯?

代碼:

int * status=0; 
    char * buf = 0; 
    char arguments[2048]; 
    buf = getcwd(buf,PATH_MAX); 
    printf("%s >",buf); 

    fgets(arguments,2048,stdin); 

    if(strncmp(arguments,"quit",4)==0){ 
     printf("Exit...\n"); 
     break; 
    } 
    else if(strncmp(arguments,"cd",2)==0){ 
     int ret; 
     printf("\nGOT = %s\n",(arguments+2)); 
     ret = chdir ((arguments+2)); 
     if(ret!=0){ 
      perror("Error:"); 
     } 
    } 
+3

...那個錯誤會是什麼,到底是什麼? – paxdiablo 2013-05-04 17:17:42

+0

GOT =/home 錯誤::沒有這樣的文件或目錄 – 2013-05-04 17:24:11

+0

這將是輸入結尾的換行符,請參閱我的答案。 – paxdiablo 2013-05-04 17:26:58

回答

4

是一樣的東西:

cd xyzzy 

然後該目錄開始在偏移量3,而不是2.另外,fgets usu盟友給你,並在最後一個換行符行,所以你想要刪除爲好,如:

if (strlen (line) > 0) 
    if (line[strlen (line) - 1] == '\n') 
     line[strlen (line) - 1] = '\0'; 

或許你也應該多一點智能tokenising輸入,就像bash殼(例如)具有相當複雜的規則。

+0

由於它的工作 剛剛添加 參數[strlen的(參數)-1] =' \ 0' ; – 2013-05-04 17:53:24

1

有可能是"cd"後空格字符,因此,如果正在進入的線,你應該加3不2

printf("\nGOT = %s\n",(arguments+3)); 
    ret = chdir ((arguments+3)); 
+0

是的,我試過,我得到: 「 GOT = /家 錯誤::沒有這樣的文件或目錄 – 2013-05-04 17:22:46