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

标签 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。

最佳答案

您似乎对间接寻址有些困惑。 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 编译程序,它实际上需要一个指向wchar_t 数组。如果您构建 Unicode 程序,则需要考虑到这一点(如果可以,您应该使用 Unicode)。

关于C++ - 在 Windows 下的 MinGW 中将 LPSTR 转换为 const char*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11911004/

相关文章:

c++ - 使用自定义比较器函数作为模板参数的编译器错误

c++ - C++ 中的临时对象

c++ - 已经到达终点的双向迭代器是否应该在 C++ 中保持递减?

python - 将单个 python 可执行文件添加到多台计算机的 Windows 系统路径中?

windows - 如何在配备 Tesla 的基于 Windows 的主机上使用 OpenGL 进行渲染

计算字符 - 文件的高度和长度 - C 编程

c - fopen 不兼容类型 char (*)[9] 而不是 C 中的 char(*)

c++ - 如何在 MacOS 上使用 C++98 进行编译?

c++ - 从 Code::Blocks 配置 g++ 不会影响命令行

c - 错误 : accessing elements in char array initializer not working with char