这些奇怪的环境变量是什么?

uni*_*dio 17 windows winapi environment-variables

GetEnvironmentString()用来获取程序的环境变量.

每个程序都有这样的结果:

=::=::\
Run Code Online (Sandbox Code Playgroud)

我不知道这是什么意思?

这是代码:

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

此外,如果我们开始列出这些变量,我们会看到如下内容:

=::=::\
=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
...
Run Code Online (Sandbox Code Playgroud)

另一方面,getenv("=ExitCode")getenv("=C:")返回NULL.

你能否提供这个"功能"的正确文档,例如getenv()忽略这样的字符串以及如何处理这些值?

Rya*_*yan 12

它们是cmd.exe模拟ms-dos目录处理的剩余物,它们基本上没什么用处,而且比任何东西都更古老.本质上,它跟踪每个驱动器的当前目录,并作为环境变量保存,以便轻松传递给其他进程.

  • @Artyom,我认为最重要的是,以`=`开头的任何东西都是shell私有的,故意没有文档,应该被忽略. (2认同)
  • @MarkRansom的问题是这些字符串出现在GetEnvironmentStrings列表中并且这样的行为似乎没有记录,因为它们不清楚如何处理它们 (2认同)