我正在编写一个使用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>
,这不会导致任何问题。