C++ C++;-在Windows下,在MinGW中将LPSTR转换为常量字符*
在Windows下,在MinGW中将LPSTR转换为const char*时遇到问题C++ C++;-在Windows下,在MinGW中将LPSTR转换为常量字符*,c++,windows,char,mingw,lpstr,C++,Windows,Char,Mingw,Lpstr,在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); con
#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;
}
#包括
#包括
#包括
#包括
int main(){
DIR*DIR;
结构导向;
LPSTR缓冲区;
GetCurrentDirectory(100,缓冲区);
常量字符*str=*缓冲区;
dir=opendir(*str);
返回0;
}
我试图做的是获取目录中所有当前文件的列表,并将其写入文件;我可以做后者,但前者给我带来了一些麻烦。一旦我可以转换不同的变量类型,我就可以知道如何读取目录
我知道什么是LPSTR,但我不知道如何将其应用于此代码
不要建议使用
atlbase.h
,因为MinGW不支持它,除非绝对必要,否则我不愿意回到Visual。您似乎对间接寻址有点困惑LPSTR
是一个char*
。它是指向char
的指针(或者,像这里的情况一样,是指向char
数组的初始元素的指针)
调用GetCurrentDirectory
时,需要向其传递一个指针,指向char
数组的初始元素以及该数组的大小。因此,您需要做的是声明一个数组并将其传递到函数中。比如说,
char buffer[MAX_PATH];
GetCurrentDirectory(MAX_PATH, buffer);
使用当前的实现,您的程序肯定会崩溃,因为缓冲区
未初始化,因此GetCurrentDirectory
将尝试写入内存中的某个随机位置
您还应该检查GetCurrentDirectory
的返回值,以确保它成功完成,并且缓冲区包含完整的路径。解释它可能返回的值
获得路径后,可以将其直接传递给opendir
:数组缓冲区
可以隐式转换为指向其初始元素的指针,即char[MAX\u path]
可以转换为char*
——并且char*
可以隐式转换为opendir
所需的char const*
:
DIR* dir = opendir(buffer);
请注意,
GetCurrentDirectory
的签名取决于是否定义了UNICODE
宏:如果您是为UNICODE编译程序,它实际上需要指向wchar\t
数组的指针。如果您构建一个Unicode程序,您需要对此进行说明(如果可以的话,您应该使用Unicode)。啊,谢谢。MinGW似乎缺少Visual所具有的一些功能,因此我可能需要切换或寻找解决方法。无论如何,我感谢您的帮助。@用户您应该能够定义UNICODE
和\UNICODE
符号,以便即使在MinGW中也能编译UNICODE应用程序。它仍然使用标准的Windows标题,这就是它们的工作方式。当然,对于字符和字符串,您需要使用wchar\u t
类型,而不是char
。