基于wchar_t*的向量的奇怪行为
Strange behaviour with wchar_t* based vector
我正在开发一个小函数,它遍历目录并将所有文件的名称放入基于wchar_t*
的向量中:
#include <Windows.h>
#include <tchar.h>
#include <vector>
#include <Shlwapi.h>
#pragma comment(lib, "Shlwapi.lib")
int _tmain(int argc, _TCHAR* argv[])
{
WIN32_FIND_DATA ffd;
std::wstring sDir(L"D:\Test");
sDir += L"\*";
HANDLE hFind = INVALID_HANDLE_VALUE;
hFind = FindFirstFile(sDir.c_str(), &ffd);
std::vector<wchar_t*> vctsFiles;
wchar_t szBuf[MAX_PATH];
do
{
if (!(ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
{
memset(szBuf, 0, sizeof(szBuf));
::PathCombine(szBuf, L"D:\Test", ffd.cFileName);
vctsFiles.push_back(szBuf);
}
} while(FindNextFile(hFind, &ffd) != 0);
return 0;
}
问题是,一旦添加了新文件名,vector中的所有项都会被覆盖。也就是说,所有的向量项都包含相同的值。
我不太确定为什么会发生这种情况,因为我总是在将缓冲区用于新条目之前清除它。有没有办法纠正这种行为?如有任何建议,我将不胜感激。
你的向量是一个指针向量,它们都指向同一个地方(szBuf
)。您需要每次分配一个new szBuf
,或者更好的是,使用一个wstring的向量。
std::vector<std::wstring> vctsFiles;
相关文章:
- 基于范围的 for 循环:迭代使用一个元素扩展的向量
- C++ - 使用基于范围的 for 循环将字符值分配给向量中的字符串不会分配值
- 布尔值向量的基于范围 for 循环
- 关于在向量向量上使用基于范围的 for 循环
- 基于不同字段的对象向量的排序功能
- 使用基于范围的指针循环和向量时出现C++错误
- 用基于范围的for循环填充指针向量
- 基于整数向量执行位排列的有效方法?
- 非常量对象的向量似乎在基于范围的 for 循环中被视为常量
- 如何打印出唯一指针对象向量中的值(基于范围的循环)?C++
- 基于向量的数据格式的分割故障误差
- 如何将基于范围的 for 循环与未来的<T>向量一起使用
- 转换字符串向量:基于先前的值跳过元素
- 基于C 中布尔值向量中的向量中选择对象
- 基于向量数据生成字符串
- 如何使用另一个"Eigen::VectorXd"向量中的值初始化"Eigen::VectorXd",基于索引的"向量<int>"
- 基于另一个分类向量对向量进行分类
- 基于结构中的向量大小初始化数组 [c++]
- 基于自定义范围的迭代器,用于矢量的模板向量
- 基于其第一个向量元素在结构中进行排序