Может ли opendir (pathname) изменить значение входного пути? - PullRequest
2 голосов
/ 16 марта 2012

Я получил несколько любопытных результатов при использовании 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()Вот.Есть ли у него побочные эффекты, которых я не вижу?Или на работе что-то еще?

1 Ответ

3 голосов
/ 16 марта 2012

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

DIR *opendir(const char *dirname);

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

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

...