2013-04-10 79 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