请教下大家,c++遍历文件夹下制定文件出现了很费解的问题

题目描述

想遍历某个文件夹下制定文件,并且把文件名写入一个vector,但是实现的时候,这个vector的元素全部为最后一个文件的文件名,请问下这是什么原因?

相关代码

_finddata_t fileDir;

vector<const char*>xmlVec;
char* dir=".//*.xml";
long HANDLE;
HANDLE = _findfirst(dir,&fileDir);
if(HANDLE ==-1)
{
    cout<"No file is found"<<endl;
    return -1;
}
xmlVec.push_back(fileDir.name);

while( _findnext(HANDLE, &fileDir) == 0 )
xmlVec.push_back(fileDir.name);

_findclose(HANDLE);

你期待的结果是什么?实际看到的错误信息又是什么?

阅读 1.3k
2 个回答

因爲你容器 vector<const char*>xmlVec 存的是 char 數組的指針,而不是值,因此指向的值永遠是 fileDir.name 的值。建議使用 string 類存儲 fileDir.name 的值,容器也定義為 vector<string>。直接 push string。

就如同1楼说的,你的vector里面放的都是指向同一位置的char* 指针,那你看到的结果当然就是同一个值。改的方法有两种,一种是改成 vector<string>,另外一种是把

xmlVec.push_back(fileDir.name);

改为

xmlVec.push_back(_strdup(fileDir.name));

这种方法需要最后自己来释放_strdup出来的指针。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题