2012-05-03 34 views
13

我使用GetEnvironmentString()來獲取程序的環境變量。這些奇怪的環境變量是什麼?

每個程序都有這樣的結果在第一:

=::=::\ 

我不知道這是什麼意思?

下面是代碼:

LPWCH lpEnvString=GetEnvironmentStringsW(); 
LPWSTR lpszVariable=(LPWSTR)lpEnvString; 
while (*lpszVariable) 
{ 
    wprintf(L"%s\n",lpszVariable); 
    lpszVariable+=wcslen(lpszVariable)+1; 
} 
FreeEnvironmentStringsW(lpEnvString); 

此外,如果我們開始上市這樣的變量,我們將看到的東西,如:

=::=::\ 
=C:=C:\Users\username\value 
=ExitCode=00000001 
ALLUSERSPROFILE=C:\ProgramData 
APPDATA=C:\Users\artik\AppData\Roaming 
CommonProgramFiles=C:\Program Files (x86)\Common Files 
CommonProgramFiles(x86)=C:\Program Files (x86)\Common Files 
CommonProgramW6432=C:\Program Files\Common Files 
... 

在另一方面,getenv("=ExitCode")getenv("=C:")返回null。

您能否提供此「功能」的正確文檔,例如getenv()getenv()會忽略此類字符串以及應該如何處理這些值?

+1

向我們顯示代碼。 – Nick

+2

@Nick所有你需要做的就是調用'GetEnvironmentStrings()' –

+0

我想我想檢查他在做什麼與返回值,以獲得提供的字符串。另外 - 你假設我有一臺Windows PC :) – Nick

回答

8

它們是來自cmd.exe模擬ms-dos目錄處理的剩菜,它們基本沒有什麼用處,並且比任何東西都更古老。本質上,它跟蹤每個驅動器的當前目錄,並保存爲一個環境變量,以便輕鬆傳遞給其他進程。

+0

這個問題更多的是關於如何getenv應該如何處理他們的文檔等指針需要文檔。 – Artyom

+2

@Artyom,我認爲,所有以'='開頭的內容對於shell來說都是私有的,故意沒有記錄,應該忽略。 –

+0

@MarkRansom問題是這些字符串出現在GetEnvironmentStrings列表中,並且這樣的行爲似乎沒有記錄在不清楚如何處理它們 – Artyom