Использование dirent-> g_; d_name вместе со строкой завершается неудачно

Я пишу приложение C ++, которое использует dirent.h библиотека, чтобы читать файлы из каталога. В какой-то момент я хочу сделать выбор между файлами и каталогами. Для этого я добавил следующий фрагмент кода:

entry = readdir(used_directory); //read next object from directory stream
DIR* directory_test = opendir((path + entry->d_name).c_str()); //try to open object as directory
if ( directory_test != nullptr) { //object is directory
if (entry != nullptr) { //reading from directory succeeded
dirs.push_back(entry->d_name); //add filename to file list
++dircounter;
}
}
else { //object is file

path это тип string и запись является типом dirent *,
При этом программа вызывает ошибку доступа к памяти, без нее нет.
Я выяснил, что ошибка вызвана

(path + entry->d_name)

Но это не неявное преобразование в string в заявлении, потому что другие тесты, такие как cout << entry->d_name; или же path += entry->d_name не удалось с той же ошибкой, тоже. Очевидно, что с использованием entry->d_name как char *хотя это определяется так (в документации dirent.h).
Почему происходит этот сбой?

РЕДАКТИРОВАТЬ:
Позже в программу добавлю entry->d_name к vector<string>, это не вызывает никаких проблем.

0

Решение

Ошибка доступа к записи перед проверкой, если она равна nullptr,
Потому что мой цикл, проходящий через каталог, останавливается, если запись равна nullptrПоследнее изменение вызывает ошибку.

1

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector