使用 getenv 检索不存在的环境变量时出现访问冲突异常
Posted
技术标签:
【中文标题】使用 getenv 检索不存在的环境变量时出现访问冲突异常【英文标题】:Access violation exception while using getenv to retrieve an environment variable that doesn't exist 【发布时间】:2011-03-08 11:56:14 【问题描述】:我正在使用 MS Visual Studio 2008 开发 C++ 应用程序。我使用 'getenv()' 函数来获取环境变量,但是当搜索到的环境变量不存在时,它会引发访问冲突异常。这里有什么问题以及如何解决?
文档说如果搜索到的环境变量不存在,getenv() 函数将返回一个 NULL 指针,但为什么我会收到此访问冲突异常?
【问题讨论】:
您可能没有检查 getenv() 是否返回 NULL。向我们展示代码。 你在用 getenv 的返回值做什么?听起来您正在取消引用返回的 NULL。例如,尝试将其放入std::string var = getenv ("MY_VAR")
之类的字符串中即可。
【参考方案1】:
std::string
类在您使用std::string(str)
时调用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);
【讨论】:
以上是关于使用 getenv 检索不存在的环境变量时出现访问冲突异常的主要内容,如果未能解决你的问题,请参考以下文章
使用 Tweepy 检索 Twitter 数据时出现 401 错误
尝试通过 Axios (React Native) 访问 IBM Watson Assistant 消息时出现错误 500
访问 Javascript 映射中的值时出现问题,函数执行顺序可能存在问题
IIS配置PHP环境:测试PHP时出现=》HTTP 错误 403.1 禁止访问:禁止执行访问
如何解决使用 Appium 测试 Android 应用时出现的错误“appium-uiautomator2-server-debug-androidTest.apk'不存在或不可访问”?