【问题标题】:getenv function not returning expected answergetenv 函数未返回预期答案
【发布时间】:2013-04-02 13:55:57
【问题描述】:

我正在尝试访问我的环境变量之一,即JAVA_HOME。 为此,我使用getenv() 函数,如下所示:

#include <iostream>
#include <string.h>

int main() {
    const char* env = getenv("JAVA_HOME");
    if(env != NULL)
        std::cout << "Environnement : " << env << std::endl;
    else
        std::cout << "NULL" << std::endl;
    return 0;
}

我尝试了std::getenv("PATH");,它返回的内容与我放置JAVA_HOME 变量的文件/etc/bash.bashrc 不同。

我希望 std::getenv("JAVA_HOME") 返回我放入 /etc/bash.bashrc 文件中的内容。现在它返回了不同的东西。

如何获得正确的环境变量?我做错了什么?

我在 Ubuntu 12.04 和 GCC 4.7.2 下使用 C++11 和 QtCreator

编辑:代码

  • Include[...] 是 include 的简写

  • 添加了 NULL 处理

编辑:进展

  • 我试过extern char **environ,但它不包含我需要的一个变量...

编辑:部分解决方案

没有办法像我发现的那样轻松地做这些事情。 我已经在 IDE 中设置了个人环境变量来解决这个问题。

【问题讨论】:

  • #include [...] 实际上是您代码的一部分吗?
  • 我很确定它应该被称为 .bashrc 并在你的主目录中。
  • 在我的主目录中看不到任何 *.bashrc 文件...全名应该是什么?
  • 您是否验证了该变量实际上已设置?
  • 是的,是的!我附和了它。它回答得很好。

标签: c++ linux ubuntu environment-variables


【解决方案1】:

您的代码很好,只是您应该明确处理来自getenv() 的NULL 返回值。

几乎可以肯定,问题在于您如何运行代码。如果你:

  1. 启动一个shell;
  2. 确保$JAVA_HOME 在该shell 中设置正确(通过bashrc 或任何其他方式);
  3. 从 shell 运行可执行文件;

我打赌它会正常工作。

【讨论】:

  • 程序因任何原因而崩溃是正常的。
  • 你是对的......它有效......为什么会这样?我不明白为什么我无法从我的 IDE 中获取正确的信息!
  • @Xaltar:那是因为它继承了 IDE 的环境变量。根据您的说法,您的 IDE 似乎没有在其环境中设置 JAVA_HOME
  • 那我该如何使用自己的环境变量呢?你知道吗?
  • 我遇到了同样的问题...解决了吗?我看到答案被接受,但仍然不知道如何使其通用(没有这些设置并从 shell 运行。这对于没有使用 shell 和环境变量经验的人来说太不方便了,他们期望只需单击即可运行程序)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-21
  • 1970-01-01
  • 2018-12-16
  • 2012-08-16
  • 1970-01-01
相关资源
最近更新 更多