directory_iterator
在使用之前存储文件名称的目录中的所有文件时,c_str()
会导致无效读取(和垃圾输出)。
这对我来说似乎很奇怪。
代码示例:
在职的:
#include <iostream>
#include <filesystem>
namespace fs = std::filesystem;
int main() {
for (auto const &entry : fs::directory_iterator("./")) {
std::cout << entry.path().filename().c_str() << '\n';
}
}
valgrind 没有报告错误。
损坏的输出:
#include <iostream>
#include <filesystem>
namespace fs = std::filesystem;
int main() {
for (auto const &entry : fs::directory_iterator("./")) {
auto filename = entry.path().filename().c_str();
std::cout << filename << '\n';
}
}
valgrind 报告 159 次无效读取(大小为 1)——确切数字取决于目录中有多少文件。
这两个片段都已使用 gcc 9.1 使用以下命令编译:
g++-9.1 test.cpp -std=c++17