2016-02-05 2 views
0

Я создаю дерево каталогов.C: как вернуть tree_node в функцию?

Я пытаюсь реплицировать команду 'cd' оболочки, чтобы войти в каталог.

Как вернуть tree_node cwd после создания cwd его подкаталога?

(УХО = текущий рабочий каталог, подкаталог = подкаталог), например:

УХО = subDir-> дерево;

return cwd; (Как я вернусь УХО без ошибок?)

// *checks whether cwd has a subdirectory named arg 
// *if yes, the function returns the corresponding tree node (and become new working directory) 
// *if no, prints an error message 
// *handle cd and cd .. 
struct tree_node *do_cd(struct tree_node *cwd, struct tree_node *root, char *arg) { 

    // checks if directory exists 
    struct list_node *subDir = cwd -> first_child; 

    while (subDir != NULL) { 
     if (strcmp(subDir->tree->string_buffer, arg) == 0) { 
      printf("Entering directory with name %s \n", arg); 
      subDir->tree = cwd; 
      return cwd; 
      printf("Directory with name %sentered.\n", arg); 
     } 
     subDir = subDir->next; 
    } 
    printf("Directory does not exist!\n"); 
} 
+0

Вы сказали, что если (...), то верните cwd, а как насчет других условий? компилятор дает ошибку, потому что не все пути возвращаются – Pooya

+0

Что вы подразумеваете под «как мне вернуть cwd без ошибок»? Вы имеете в виду ошибки сборки? Какие ошибки сборки? Ошибки во время выполнения? Что и где? И почему бы не вернуть 'NULL', если вы не смените каталог? Вы должны *** возвращать что-то во всех путях функции, иначе вы будете использовать * неопределенное поведение * при использовании возвращаемого указателя. Кроме того, вы знаете, что 'return' немедленно возвращает функцию return *, без операторов после ее выполнения. –

+0

Где я должен вернуть NULL? После printf («Каталог не существует! \ N») ;? – MsSingularity

ответ

0

Вы должны вернуть NULL или какой-либо указатель на допустимое дерево. Вы можете проверить этот код:

struct tree_node *do_cd(struct tree_node *cwd, struct tree_node *root, char *arg) { 
// checks if directory exists 
struct list_node *subDir = cwd -> first_child; 

while (subDir != NULL) { 
    if (strcmp(subDir->tree->string_buffer, arg) == 0) { 
     printf("Entering directory with name %s \n", arg); 
     subDir->tree = cwd; 
     printf("Directory with name %sentered.\n", arg); 
     return cwd; 
    } 
    subDir = subDir->next; 
} 
printf("Directory does not exist!\n"); 
return NULL; 
} 
+0

@JohnHascall: в аргументе функции он определяется как struct tree_node * – Pooya

+0

yes. виноват. –

Смежные вопросы