C++ GetModuleFileName 访问冲突

标签 c++ visual-c++ crash access-violation

我试图通过使用这段代码将当前的可执行路径获取到一个字符串中(我也尝试过它的其他几个版本,但它们都没有真正起作用,我总是在某些时候遇到访问冲突)

char *filename = new char[MAX_PATH + 1];
GetModuleFileName(NULL, filename, MAX_PATH);
string exe = filename;

由于某种原因,这在第一行出现访问冲突而失败。我错过了什么?

最佳答案

此版本进行错误检查,并且还尊重 GetModuleFileNameTCHAR 的 一起工作(第二个参数是 LPTSTR,这是一个指向 TCHAR 的指针。

#include <windows.h>
#include <string>

typedef std::basic_string<TCHAR> TCharString;

int main()
{
   TCHAR filename[MAX_PATH + 1];
   if ( GetModuleFileName(NULL, filename, MAX_PATH) != 0 )
   {
      TCharString strExe = filename;
   }
}  

请注意,由于 GetModuleFileNameTCHAR 一起使用,因此盲目使用 std::string 作为字符串类型是不正确的。相反,创建一个基于 TCHAR 的字符串类型。

其次,进行错误检查以确保我们不会将无效字符串分配给字符串对象。

关于C++ GetModuleFileName 访问冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25831101/

相关文章:

C++ - 是否值得在 Windows 上使用 GCC 而不是 MSVC?

c++ - 输入为高值时程序崩溃

c++ - 模拟被测类的依赖关系

c++ - Azure IoT Edge C++ 模块未将设备发送到云遥测

c++ - 如何使 float 使用逗号而不是点?

c++ - 为什么Visual Studio生成的C++ "Hello World"项目看起来有点奇怪?

IIS 应用程序池不断崩溃

excel - Excel保持卡住

c# - 如何模拟低电平鼠标左键点击,让微软虚拟键盘接受?

c++ - 返回类型后的静态关键字