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

Visual c++ 使用getenv检索不使用';不存在 我使用MS VisualStudio 2008开发C++应用程序。我使用“getenv()”函数来获取环境变量,但当搜索到的环境变量不存在时,它会抛出访问冲突异常。这里的问题是什么?如何纠正,visual-c++,getenv,Visual C++,Getenv,文档说如果搜索到的环境变量不存在,getenv()函数将返回一个空指针,但是为什么我会得到这个访问冲突异常?当您使用std::string(str)时,std::string类调用strlen,这将在传递空字符串时产生访问冲突。您需要做的是: std::string env(const char *name) { const char *ret = getenv(name); if (!ret) return std::string(); return std::stri

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

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

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

您可以这样使用:

std::string myenv;
if (getenv("MYENV", myenv))
    doSomethingWithMyEnv(myenv);

可能您没有检查getenv()是否返回NULL。向我们显示代码。您如何处理getenv的返回值?听起来您正在解引用返回的NULL。例如,尝试将其放入一个字符串,如
std::string var=getenv(“MY_var”)
即可。
std::string myenv;
if (getenv("MYENV", myenv))
    doSomethingWithMyEnv(myenv);