2012-05-03 82 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