【发布时间】:2014-11-28 17:12:01
【问题描述】:
我有这段代码遍历一个目录,获取文件名并将它们推送到一个向量中。
std::vector<const char*> afp_filenames;
if ((dir = opendir (path.c_str())) != NULL) {
while ((ent = readdir (dir)) != NULL) {
if ( (ent->d_name[0] == '.') ) continue;
afp_filenames.push_back((const char*)ent->d_name);
cout <<afp_filenames[i]<<"\n";
i++;
}
}
cout 打印正确的文件名。当我再次打印存储在向量中的值时,问题就出现了。使用迭代器时我得到相同的结果。
for (j = 0; j < i; j++) {
cout <<afp_filenames[j]<<"\n";
}
这是我在控制台中获得的示例。 对于第一个循环:
afp_PortaAPorta_5_318_383.dat
afp_PortaAPorta_5_407_663.dat
afp_PortaAPorta_5_485_510.dat
afp_781_5_472_371.dat
afp_781_5_115_617.dat
afp_781_5_358_509.dat
afp_781_5_276_348.dat
第二个:
2.dat
.dat
afpò
9.dat
2.dat
5_356_572.dat
5_291_435.dat
afp_781_5_243_558.dat
afp_PortaAPorta_5_352_716.dat
afp_781_5_111_541.dat
【问题讨论】:
-
可能您只需要复制字符串,因为您从 d_name 获得的指针可能会在一段时间后成为垃圾。
-
@gd1 ...只是我的想法。请改用
std::string作为元素类型。 -
虽然这个问题并不“精彩”,但我认为不值得投票或结束。能详细点吗?
-
使用
std::vector和std::string会轻松解决许多问题。你已经成功了一半。