getmodulefilenamea(null, path, max_path)可安全获取当前exe完整路径;须传null、提供足够缓冲区并检查返回值,避免截断或失败。

Windows下用GetModuleFileName获取可执行路径
在Windows平台,GetModuleFileName是最直接可靠的方式,它能返回当前进程主模块(即.exe文件)的完整路径。注意必须传入NULL作为第一个参数,表示获取当前模块;第二个参数需提供足够大的缓冲区(建议至少MAX_PATH字节),第三个参数是缓冲区大小。
常见错误是传入错误的模块句柄(比如用GetModuleHandle(NULL)再传给GetModuleFileName),其实直接传NULL更安全;另一个坑是没检查返回值——如果返回0或超过缓冲区长度,说明失败或截断,此时不应直接截取字符串。
示例关键片段:
char path[MAX_PATH] = {0};
DWORD len = GetModuleFileNameA(NULL, path, MAX_PATH);
if (len > 0 && len < MAX_PATH) {
// 成功,path包含完整路径
}
Linux/macOS用/proc/self/exe或_NSGetExecutablePath
Linux下标准做法是读取/proc/self/exe这个符号链接,它始终指向当前进程的可执行文件。用readlink即可获取路径,但要注意:返回值是字节数,不是null终止字符串,必须手动补