首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么FindFirstFile函数不接受我指向数据结构的指针?

为什么FindFirstFile函数不接受我指向数据结构的指针?
EN

Stack Overflow用户
提问于 2020-04-20 19:45:10
回答 2查看 69关注 0票数 0

亲爱的Stack溢出社区。

我是这里的第一张海报。我发现这个论坛在过去非常有帮助,并希望在未来的许多方面作出贡献。现在我有一个无法分辨头尾的问题。

我试图使用FindFirstFileA、FindNextFileA和CloseFind函数在特定目录中获取文件名。我正在使用MicrosoftVisualStudio2017编写C++代码,并使用UNICODE。

我选择了"A"-suffix版本,而不是“常规”版本,因为我发现使用LPCWSTR很麻烦。

我的相关功能代码目前如下所示:

代码语言:javascript
运行
复制
void MainLoop::FindFiles(std::string Directory)
{
    Directory = Directory + "*";
    LPCSTR Path = Directory.c_str();
    LPWIN32_FIND_DATAA FileData;
    HANDLE hFind;
    hFind = FindFirstFileA(Path, FileData);
    while (FindNextFileA(hFind, FileData) != 0)
    {
        Files.push_back(FileData->cFileName);
    }
    FindClose(hFind);
}

这段代码有一个“奇怪”的地方,还有一个错误不让我编译。

“奇怪”的事情:

在我可以在所有FindFirstFile函数上找到的所有文档和示例中,它都指出第二个参数应该是一个指针,因此我的代码实际上应该如下所示: hFind = FindFirstFileA(Path,&FileData);但是当我尝试这样做时,编译器告诉我LPWIN32_FIND_DATAA*与LPWIN32_FIND_DATAA不兼容。我不知道那是怎么回事,所以请给我点光。

然而,实际错误与此无关:

当我试图运行程序时,会收到一条错误消息,说明"FileData“未初始化,然后拒绝运行。在我看到的所有示例中,数据结构都是像我一样声明的。没有论坛的帖子,我可以找到解决我的特殊问题。现在,我知道我只发布了一个特定的函数,如果您需要更多的了解我的设置,我会很高兴地告诉您。任何对我的问题的洞察力或对我的帖子或我的代码的建设性意见都是欢迎的。

恭敬

尼可拉斯·比约克罗斯

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-04-20 19:49:20

这是一个未初始化的指针:

代码语言:javascript
运行
复制
LPWIN32_FIND_DATAA FileData;

LPWIN32_FIND_DATAA是用于WIN32_FIND_DATAA*的类型胡枝子。

您需要的是结构的实际实例,如

代码语言:javascript
运行
复制
WIN32_FIND_DATAA FileData;

注意,LP从类型的开始就消失了。

然后,当您将其地址传递给函数时,指针类型将匹配。

代码语言:javascript
运行
复制
hFind = FindFirstFileA(Path, &FileData);
票数 1
EN

Stack Overflow用户

发布于 2020-04-20 19:49:04

LPWIN32_FIND_DATAA 已经是一个指针-- LP前缀代表“长指针”(16位时代的遗物)。

您希望将变量声明为WIN32_FIND_DATAA,并传递指向该变量的指针。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61330771

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档