2013-07-10 297 views
0

如何使用C/C++設置環境變量?
我用C設置環境變量

putenv() 

,但之後我跑的代碼,環境變異沒有任何改變。

代碼:

#include <stdlib.h> 
#include <iostream> 
#include <string.h> 
using namespace std; 
int main() 
{ 
    char a[128]; 
    char b[256]; 

    char all[512]; 
    cin>>a; 
    cin>>b; 
    cout<<'\n'; 
    cout<<a<<'\n'; 
    cout<<b<<'\n'; 

    strcpy(all,a); 
    strcat(all,"="); 
    strcat(all,b); 
    cout<<all<<'\n'; 
    cout<<putenv(all); 
} 

我試圖函數 「SETENV()」 之前,但錯誤信息:

錯誤: 'SETENV' 不是在這個範圍內聲明

我的操作系統是Windows 7的

IDE代碼::塊

+0

http://msdn.microsoft.com/en-us/library/83zh4e6k%28v=vs.80%29.aspx「僅影響當前進程本地的環境;不能使用它們來修改命令級環境「。 – BLUEPIXY

+0

這是一些非常奇怪的C代碼。也許你有這個問題混淆? –

+0

給科迪格雷非常感謝我努力工作 – Ken

回答

2

I tried the function "setenv()" before but the error message:

error: 'setenv' was not declared in this scope 

stdlib.h標頭中聲明瞭setenv函數。您需要包括爲了這個頭調用該函數:

#include <stdlib.h> 

如果你絕對必須使用這些函數之一,我會優先推薦使用setenvputenv。 Jonathan Leffler詳細討論了here的基本原理。

考慮到無論如何setenvputenv都是非便攜式的,我個人更喜歡稱爲Win32 SetEnvironmentVariable功能。

但我不確定爲什麼你認爲你需要首先修改環境。這個問題並沒有解釋你想要解決什麼問題,也沒有說明你期望改變什麼。

請記住,這兩個函數只會改變調用進程的環境。它們對全球系統環境沒有任何影響。

出於測試目的,您需要設置您所選擇的環境變量,然後使用類似getenvGetEnvironmentVariable的東西來檢索和打印進程的當前環境變量,以確保您的設置已正確。

+0

我必須包括圖書館 但我真的不知道爲什麼setenv得到那個錯誤信息 和爲什麼putenv沒有改變任何 – Ken

+0

我真的不喜歡使用windows.h.it讓我的程序運行慢 – Ken

+0

包含頭文件無法讓您的程序變慢。只有您實際使用的聲明纔會鏈接到您的應用中。即使如此,所有的Windows函數都在DLL中,所以只有一條指令被編譯到代碼中。當然不會比stdlib.h中的函數更多。如果你的意思是它會減慢編譯速度,你應該使用預編譯頭文件。像Windows.h這樣的系統頭文件是從預編譯頭文件中獲益的理想之地。 –

1

putenv()僅影響當前進程。如果在運行代碼後檢查它們,環境變量保持不變是很自然的。

+0

非常感謝您解決我的問題 – Ken