我正在使用 MS Visual Studio 2008 来开发 C++ 应用程序。我使用'getenv()'函数来获取一个环境变量,但是当搜索到的环境变量不存在时,它会抛出一个访问冲突异常。这里有什么问题以及如何纠正它?
文档说如果搜索到的环境变量不存在,getenv() 函数将返回一个 NULL 指针,但为什么我会收到此访问冲突异常?
在std::string
类调用strlen
时使用std::string(str)
,当传递一个空字符串,这将产生访问冲突。你需要做的是:
std::string env(const char *name)
{
const char *ret = getenv(name);
if (!ret) return std::string();
return std::string(ret);
}
Run Code Online (Sandbox Code Playgroud)
或者
bool getenv(const char *name, std::string &env)
{
const char *ret = getenv(name);
if (ret) env = std::string(ret);
return !!ret;
}
Run Code Online (Sandbox Code Playgroud)
你可以这样使用:
std::string myenv;
if (getenv("MYENV", myenv))
doSomethingWithMyEnv(myenv);
Run Code Online (Sandbox Code Playgroud)