Может ли opendir(pathname) изменить значение входного пути?

Я получил некоторые любопытные результаты при использовании opendir():

int dtw(char *path) {

    struct stat statbuf;

    ...

    else if (S_ISDIR(statbuf.st_mode)) {
            printf("Path is: %s\n", path);

            struct dirent *dirent;
            DIR *dirp;

            if ((dirp = opendir(path)) == NULL) {
                puts("Can't open directory.");
                return -1;
            }

            printf("Path is: %s\n", path);
    }

    ...
}

Результат:

Path is: /home/.../etc
Path is:

Единственное, что может повлиять на path, это opendir() здесь. Есть ли у него побочные эффекты, которых я не вижу? Или что-то еще на работе?


person Cody    schedule 16.03.2012    source источник
comment
Как вы объявили и инициализировали path?   -  person sarnold    schedule 16.03.2012
comment
path анализируется из командной строки и в конечном итоге передается в соответствующую функцию из main(). Вопрос отредактирован, чтобы отразить это.   -  person Cody    schedule 16.03.2012


Ответы (1)


Изменения не допускаются; определение opendir():

DIR *opendir(const char *dirname);

А const говорит, что opendir() не менял.

Интересно, является ли ваш path указателем на освобожденную память? В этом случае память могла быть выделена для opendir(), и вы видите изменение, потому что вы используете висячий указатель на память, на которую вам не следует смотреть?

person Jonathan Leffler    schedule 16.03.2012
comment
Ах, это точно. Впервые сталкиваюсь с такой проблемой после перехода с Java на C. Большое спасибо. - person Cody; 16.03.2012