C++ Windows API中GetFullPathName()函数的异常行为
当GetFullPathName()在我正在组合的文件管理器类的成员函数中被调用时,它会将成员函数中先前声明的int变量重置为0,并且似乎会将我必须尝试绕过的int成员变量变成随机垃圾 以下是成员函数的第一部分,直到出现问题为止:C++ Windows API中GetFullPathName()函数的异常行为,c++,winapi,C++,Winapi,当GetFullPathName()在我正在组合的文件管理器类的成员函数中被调用时,它会将成员函数中先前声明的int变量重置为0,并且似乎会将我必须尝试绕过的int成员变量变成随机垃圾 以下是成员函数的第一部分,直到出现问题为止: std::vector<std::wstring> FileManager::FindFiles() { WIN32_FIND_DATA tempStorage; int filesFound = 0; int filesFound
std::vector<std::wstring> FileManager::FindFiles()
{
WIN32_FIND_DATA tempStorage;
int filesFound = 0;
int filesFound3 = 0;
std::wstring file;
//std::wstring path;
wchar_t path[4096] = TEXT("");
std::vector<std::wstring> foundFiles;
//wchar_t *output;
if((fileHandle = FindFirstFile(TEXT("*.*"), &locatedData)) == INVALID_HANDLE_VALUE)
{
throw Exception(GetLastError(),5);
}
else
{
filesFound3++;
filesFound++;
filesFound2++;
foundFiles.resize(filesFound);
std::wstring temp = locatedData.cFileName;
//tempStorage = locatedData;
GetFullPathName(temp.c_str(), sizeof(path),path,NULL);
std::vector文件管理器::FindFiles()
{
WIN32_查找_数据存储;
int filesFound=0;
int filesfund3=0;
std::wstring文件;
//std::wstring路径;
wchar_t path[4096]=文本(“”);
std::矢量文件;
//wchar_t*输出;
if((fileHandle=FindFirstFile(TEXT(“*”),&locatedData))==无效的句柄值)
{
抛出异常(GetLastError(),5);
}
其他的
{
FileFound3++;
filesfund++;
FileFound2++;
foundFiles.resize(filesFound);
std::wstring temp=locatedData.cFileName;
//tempStorage=locatedData;
GetFullPathName(temp.c_str(),sizeof(path),path,NULL);
调用该函数后,filefound
和filefound3
设置为0
而不管它们以前保存了什么值,而且filefound2
只是垃圾。找到所有这些files的原因是因为我正试图找出正在发生的事情
我无法解释为什么会发生这种情况,这也是我在这里发帖的原因。我在MSDN和谷歌上都搜索过,但什么也找不到
对此有任何建议问题,我将不胜感激。其中filefound2
声明?我怀疑它是未初始化的成员变量。它在类头文件中声明为公共成员变量。它在类构造函数中初始化。通过遍历我自己的代码,我可以看到它在正确的va初始化但是,当调用GetFullPathName()时,其值变为垃圾邮件。GetFullPathName()的第二个参数是以字符为单位的缓冲区大小;您正在以字节为单位为它指定缓冲区大小。可能它正在覆盖堆栈。哦,哇,这解决了它!我以为它得到了字符长度。我想这就是为什么有一个strlen()函数。><用wcslen()替换sizeof())修复了该问题。我该如何在该网站上将上述注释设置为正确答案?:3编辑:胡说八道,它实际上没有将路径存储在path变量中。您不需要wcslen。您需要sizeof(path)/sizeof(wchar\t)。