0

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

4

1 回答 1

2

您似乎对间接有点困惑。 LPSTR是一个char*。它是一个指向 a 的指针char(或者,就像这里的情况一样,一个指向 的数组的初始元素的指针char)。

当您调用 时GetCurrentDirectory,您需要将指针传递给数组的初始元素和该数组char的大小。因此,您需要做的是声明一个数组并将其传递给函数。例如,

char buffer[MAX_PATH];
GetCurrentDirectory(MAX_PATH, buffer);

使用您当前的实现,您的程序肯定会因为buffer未初始化而崩溃,因此GetCurrentDirectory会尝试写入内存中的某个随机位置。

您还应该检查 的返回值GetCurrentDirectory以确保它成功完成并且缓冲区包含完整路径。 它的文档解释了它可能返回的值。

一旦你有了路径,你可以将它直接传递给opendir:数组buffer可以隐式转换为指向其初始元素的指针——也就是说,char[MAX_PATH]可以转换为char*——并且char*可以隐式转换为char const*所需的opendir

DIR* dir = opendir(buffer);

请注意, 的签名GetCurrentDirectory取决于是否UNICODE定义了宏:如果您正在为 Unicode 编译程序,它实际上需要一个指向wchar_t. 如果您构建一个 Unicode 程序,您需要考虑到这一点(如果可以,您应该使用 Unicode)。

于 2012-08-11T01:07:19.610 回答