3

我正在使用 MS Visual Studio 2008 开发 C++ 应用程序。我使用 'getenv()' 函数来获取环境变量,但是当搜索到的环境变量不存在时,它会引发访问冲突异常。这里有什么问题以及如何纠正它?

文档说如果搜索到的环境变量不存在,getenv() 函数将返回一个 NULL 指针,但为什么我会收到此访问冲突异常?

4

1 回答 1

5

使用时std::string调用该类,当传递 NULL 字符串时将产生访问冲突。您需要做的是:strlenstd::string(str)

std::string env(const char *name)
{
    const char *ret = getenv(name);
    if (!ret) return std::string();
    return std::string(ret);
}

或者

bool getenv(const char *name, std::string &env)
{
    const char *ret = getenv(name);
    if (ret) env = std::string(ret);
    return !!ret;
}

你可以这样使用:

std::string myenv;
if (getenv("MYENV", myenv))
    doSomethingWithMyEnv(myenv);
于 2011-03-08T12:23:38.133 回答