C++ C++;-在Windows下,在MinGW中将LPSTR转换为常量字符*

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

在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;
}
#包括
#包括
#包括
#包括
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