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

时间:2012-08-11 01:01:27

标签: 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);
  const char *str = *buffer;
  dir = opendir(*str);
  return 0;
}

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

我知道LPSTR是什么,但我不知道如何将它应用于此代码。

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

1 个答案:

答案 0 :(得分:2)

你似乎对间接感到有点困惑。 LPSTRchar*。它是指向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)。