我试图通过使用此代码将当前可执行文件路径转换为字符串(我已经尝试了其他几个版本,但它们都没有真正起作用,我总是在某些时候遇到访问冲突)
char *filename = new char[MAX_PATH + 1];
GetModuleFileName(NULL, filename, MAX_PATH);
string exe = filename;
由于某种原因,第一行的访问冲突失败。我错过了什么?
答案 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数组。