2015-04-02 6 views
-1
#include<stdio.h> 
#include<unistd.h> 
#include<sys/types.h> 
#include<sys/wait.h> 
#include<string.h> 

int main() 
{ 
    char temporaryPath[50]; 

    fgets(temporaryPath, sizeof(temporaryPath), stdin); 

    if(chdir(temporaryPath) == -1) 
     printf("Failed to change directory\n"); 

    getcwd(temporaryPath, 1000); 
    printf("%s> ", temporaryPath); 
} 

Я искал много о смене директории, но я не мог понять, почему Chdir() терпит неудачу в этом случае. Если я использую fgets() вместо жесткого кодирования массива временного массива, chdir() не может сменить каталог. Почему это и что можно сделать, чтобы исправить это?ChDir() не изменяет каталог, если используется с fgets()

Большое спасибо :)

+6

'fgets' будет включать завершающую * перевод строки * (если таковые имеются) на входе, это, скорее всего, что является причиной вашей ошибки. –

+0

@ FilipRoséen-refp благодарим за ответ. Оно работало завораживающе. Хотя я тестировал его с помощью цикла, и его использование в коде действительно повлияет на производительность, и использование метода Влада имеет такой недостаток, как вы только что сказали. – Tehmas

+0

Прочитайте строку с помощью 'fgets', разделите конечную новую строку (** если ** там есть), продолжайте делать то, что вы хотели бы сделать. –

ответ

2
if (fgets(temporaryPath, sizeof(temporaryPath), stdin) != NULL) 
{ 
    int len = strlen(temporaryPath); 
    if (temporaryPath[len-1] == '\n') 
    { 
     temporaryPath[len-1] = '\0'; 
    } 

    // Now that the newline has been trimmed, use temporaryPath. 
} 
Смежные вопросы