我在 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/