C++ Windows API中GetFullPathName()函数的异常行为

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

当GetFullPathName()在我正在组合的文件管理器类的成员函数中被调用时,它会将成员函数中先前声明的int变量重置为0,并且似乎会将我必须尝试绕过的int成员变量变成随机垃圾

以下是成员函数的第一部分,直到出现问题为止:

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)。