我试图通过使用这段代码将当前的可执行路径获取到一个字符串中(我也尝试过它的其他几个版本,但它们都没有真正起作用,我总是在某些时候遇到访问冲突)
char *filename = new char[MAX_PATH + 1];
GetModuleFileName(NULL, filename, MAX_PATH);
string exe = filename;
由于某种原因,这在第一行出现访问冲突而失败。我错过了什么?
最佳答案
此版本进行错误检查,并且还尊重 GetModuleFileName
与 TCHAR 的
一起工作(第二个参数是 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
的字符串类型。
其次,进行错误检查以确保我们不会将无效字符串分配给字符串对象。
关于C++ GetModuleFileName 访问冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25831101/