C ++ GetModuleFileName访问冲突

时间:2014-09-14 07:37:53

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

我试图通过使用此代码将当前可执行文件路径转换为字符串(我已经尝试了其他几个版本,但它们都没有真正起作用,我总是在某些时候遇到访问冲突)

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

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

2 个答案:

答案 0 :(得分:1)

此版本执行错误检查,并且还认为GetModuleFileName适用于TCHAR's(第二个参数是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;
   }
}  

请注意,由于GetModuleFileName适用于TCHAR,因此盲目地使用std::string作为字符串类型是不正确的。而是根据TCHAR创建字符串类型。

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

答案 1 :(得分:0)

尽量不使用char指针。改为使用char数组。