2012-12-21 33 views
2

我想獲取環境變量的內容,如果它存在。在C++中獲取環境變量 - 我得到NULL

#define MY_VAR "MY_ENV_VAR" 
//function 
#pragma warning(disable:4996) 
char const* temp = getenv(MY_VAR); 
if(temp != NULL) 
{ 
    string_variable = std::string(temp);    
} 
//code 
#pragma warning(default:4996) 

我以爲我是在做正確的事情,但只要我創建的環境變量,把它的默認值,我預計溫度不爲NULL ......我有沒有抱太大的期望?

我在調試,我看到:

temp 0x00000 <Bad Ptr> 
! CXX0030 Error: Expression cannot be evaluated 

運行「設置」,在命令行中顯示我的環境變量(系統的方式)。

我在Windows ...

注:我使用的編譯警告,因爲我讀了GETENV已棄用或東西。

請給我一個想法,爲什麼我沒有得到有效的價值。謝謝。

+2

env-var實際上是在運行程序的環境中設置的嗎? – JasonD

+0

該錯誤可能是您沒有發佈的代碼。 –

+3

更改環境變量後重新啓動IDE。 –

回答

1

您發佈的代碼應該有效。無論如何,它爲我做了。也許你沒有得到正確的env變量,或者Visual Studio環境沒有它。試試這個:

std::string string_variable; 

#define MY_VAR "PATH" 
int main() 
{ 
    char const* temp = getenv(MY_VAR); 
    if(temp != NULL) 
    { 
     string_variable = std::string(temp);    
    } 
} 

更重要的是,擺脫了宏觀的,所以你可以在運行時什麼被傳遞到getenv看到:

std::string string_variable; 
static const std::string MY_VAR = "PATH"; 
int main() 
{ 
    char const* temp = getenv(MY_VAR.c_str()); 
    if(temp != NULL) 
    { 
     string_variable = std::string(temp);    
    } 
} 
+2

謝謝,你說得對我的代碼工作。我喝了第二杯咖啡,重新啓動了電腦 - 發現我努力排除一個不存在的問題。感謝您的幫助。 – Thalia

3

您的代碼就可以了。 您只需在添加/刪除環境變量後重新啓動Visual Studio或/和計算機。