使用 getenv 检索不存在的环境变量时出现访问冲突异常

发布于 2024-10-20 14:27:54 字数 178 浏览 9 评论 0原文

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

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

I am using MS Visual Studio 2008 for developing a C++ application. I use the 'getenv()' function to fetch an environment variable, but when the searched environment variable doesn't exist, it throws an access violation exception. What is the issue here and how to correct it?

The docs say that the getenv() function will return a NULL pointer if the searched environment variable doesn't exist, but why am I getting this access violation exception?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

一口甜 2024-10-27 14:27:54

当您使用 std::string(str) 时,std::string 类会调用 strlen,这在传递 NULL 时会产生访问冲突细绳。你需要做的是这样的:

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);

The std::string class calls strlen when you use std::string(str), which will produce an access violation when passed a NULL string. What you need to do is something like:

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

or

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

which you could use like this:

std::string myenv;
if (getenv("MYENV", myenv))
    doSomethingWithMyEnv(myenv);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文