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

时间:2015-05-09 14:16:54

标签: c++ directory dirent.h


我正在编写一个使用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

path的类型为string,条目的类型为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>,这不会导致任何问题。

0 个答案:

没有答案