我在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。
答案 0 :(得分:2)
你似乎对间接感到有点困惑。 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编译程序,它实际上需要一个指向{{1 }}。如果您构建一个Unicode程序,则需要考虑到这一点(如果可以, 应该使用Unicode)。