2013-04-10 76 views
2

我试图访问我的environement变量之一,这是JAVA_HOME。 要做到这一点,我使用getenv()功能,像这样: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; 
} 

我tryed std::getenv("PATH");返回我不同的东西从我/etc/bash.bashrc文件,我把我的JAVA_HOME变量。

我预计std::getenv("JAVA_HOME")返回我放在我的/etc/bash.bashrc文件。现在它返回不同的东西。

我怎样才能得到一个正确的environement变量?我究竟做错了什么 ?

我的Ubuntu 12.04下与GCC 4.7.2使用C++ 11与QtCreator

EDIT:代码

  • 包括[...]是为一个速记包括

  • 加空处理

编辑:进展

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

编辑:部分解决

这里没有办法,因为我发现很容易做出这样的事情。 我在IDE中设置了个人环境变量来解决这个问题。

+1

是'#include [...]'实际上是你的代码的一部分吗? – 2013-04-10 15:57:02

+0

我很确定它应该被称为'.bashrc'并在你的主目录中。 – 2013-04-10 15:57:08

+0

我在主目录中看不到任何* .bashrc文件...应该是全名? – Xaltar 2013-04-10 16:00:22

回答

1

你的代码很好,除了你应该明确地处理来自getenv()的NULL返回值。

这个问题几乎可以肯定的是你如何运行代码。如果你:

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

我敢打赌,它会正常工作。

+2

无论出于何种原因崩溃的程序都是**不好**。 – 2013-04-10 15:59:32

+0

你是对的...它的工作原理...为什么这样呢?我不明白为什么我无法从我的IDE中获得正确的信息! – Xaltar 2013-04-10 15:59:41

+1

@Xaltar:这是因为它继承了IDE的环境变量。根据您的说法,您的IDE在其环境中似乎没有设置“JAVA_HOME”。 – NPE 2013-04-10 16:08:15