gpt4 book ai didi

C++ - 在 Windows 下的 MinGW 中将 LPSTR 转换为 const char*

转载 作者:行者123 更新时间:2023-11-28 03:33:23 24 4
gpt4 key购买 nike

我在 Windows 下的 MinGW 中从 LPSTR 转换为 const char* 时遇到问题。

#include <dirent.h>
#include <cstdio>
#include <fstream>
#include <windows.h>

int main() {
DIR *dir;
struct dirent *ent;
LPSTR buffer;
GetCurrentDirectory(100, buffer);
const char *str = *buffer;
dir = opendir(*str);
return 0;
}

我想做的是获取目录中所有当前文件的列表并将其写入文件;我可以做后者,但前者给我带来了一些麻烦。一旦我可以转换不同的变量类型,我就能弄清楚如何读取目录。

我知道 LPSTR 是什么,但我不知道如何将它应用到这段代码中。

不建议使用 atlbase.h 因为 MinGW 不支持它,除非绝对必要,否则我不愿意回到 Visual。

最佳答案

您似乎对间接寻址有些困惑。 LPSTR 是一个 char*。它是一个指向 char 的指针(或者,就像这里的情况一样,是一个指向 char 数组的初始元素的指针)。

当您调用 GetCurrentDirectory 时,您需要向它传递一个指向 char 数组的初始元素的指针以及该数组的大小。因此,您需要做的是声明一个数组并将其传递给函数。例如,

char buffer[MAX_PATH];
GetCurrentDirectory(MAX_PATH, buffer);

对于您当前的实现,您的程序肯定会崩溃,因为 buffer 未初始化,因此 GetCurrentDirectory 将尝试写入内存中的某个随机位置。

您还应该检查 GetCurrentDirectory 的返回值以确保它成功完成并且缓冲区包含完整路径。 Its documentation解释它可能返回的值。

一旦有了路径,就可以将其直接传递给 opendir:数组 buffer 可以隐式转换为指向其初始元素的指针——即, char[MAX_PATH] 可以转换为 char*——并且 char* 可以隐式转换为 char const* opendir 需要:

DIR* dir = opendir(buffer);

请注意 GetCurrentDirectory 的签名取决于是否定义了 UNICODE 宏:如果您正在为 Unicode 编译程序,它实际上需要一个指向wchar_t 数组。如果您构建 Unicode 程序,则需要考虑到这一点(如果可以,您应该使用 Unicode)。

关于C++ - 在 Windows 下的 MinGW 中将 LPSTR 转换为 const char*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11911004/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com