将 dirent->d_name 与字符串一起使用失败

Using dirent->d_name together with string fails


我正在编写一个使用 dirent.h 库的 C++ 应用程序,以从目录中读取文件。有一次我想在文件和目录之间做出决定。为此,我添加了以下代码:

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

pathstring 的类型,条目是 dirent * 的类型。
这样,程序会导致内存访问错误,否则不会。
我想通了,错误是由

引起的
(path + entry->d_name)

但这不是语句中对string的隐式转换,因为其他测试如cout << entry->d_name;path += entry->d_name也失败并出现相同的错误。所以很明显,将 entry->d_name 用作 char * 是失败的,尽管它是这样定义的 (in the documentation of dirent.h).
为什么会出现此故障?

编辑:
稍后在程序中我将 entry->d_name 添加到 vector<string>,这不会导致任何问题。

在检查条目是否等于 nullptr 之前访问条目失败。
因为如果条目等于 nullptr,我在目录中的循环就会停止,最后一次迭代会导致错误。