在C / C ++中打印所有环境变量

时间:2010-01-18 10:30:30

标签: c++ c

如何获取C和/或C ++中所有环境变量的列表?

我知道getenv可用于读取环境变量,但如何将它们全部列出?

10 个答案:

答案 0 :(得分:102)

环境变量作为main()参数提供给envp - 一个空终止的字符串数组:

int main(int argc, char **argv, char **envp)
{
  for (char **env = envp; *env != 0; env++)
  {
    char *thisEnv = *env;
    printf("%s\n", thisEnv);    
  }
  return 0;
}

答案 1 :(得分:47)

#include<stdio.h>

extern char **environ;

int main() {
  int i = 1;
  char *s = *environ;

  for (; s; i++) {
    printf("%s\n", s);
    s = *(environ+i);
  }

  return 0;
}

答案 2 :(得分:14)

我认为你应该检查environ。使用“man environ”。

答案 3 :(得分:10)

您的编译器可能会为主函数提供非标准扩展,以提供其他环境变量信息。 MS编译器和大多数Unix都有这个版本的main:

int main (int argc, char **argv, char **envp)

其中第三个参数是环境变量信息 - 使用调试器查看格式是什么 - 可能是一个空终止的字符串指针列表。

答案 4 :(得分:6)

int main(int argc, char **argv, char** env) {
   while (*env)
      printf("%s\n", *env++);
   return 0;
}

答案 5 :(得分:4)

int main(int argc, char* argv[], char* envp[]) {
   // loop through envp to get all environments as "NAME=val" until you hit NULL.
}

答案 6 :(得分:4)

LPTCH WINAPI GetEnvironmentStrings(void);

http://msdn.microsoft.com/en-us/library/ms683187%28VS.85%29.aspx

编辑仅适用于Windows。

答案 7 :(得分:4)

在大多数环境中,您可以将main声明为:

main(int argc,char* argv[], char** envp)

envp包含所有环境字符串。

答案 8 :(得分:2)

如果你在Windows操作系统上运行,那么你也可以调用GetEnvironmentStrings(),它返回一个空终止字符串块。

答案 9 :(得分:0)

这里的大多数答案都指出了从大多数编译器支持的主要参数中选择环境的可能性。而亚历克斯的回答:

#include <stdio.h>
extern char **environ;

int main() {
  char **s = environ;
  for (; *s; s++) {
      printf("%s\n", *s);
  }
  return 0;
}

应该始终有效,我想知道当您在 C 代码(putenv、unsetenv)中操作环境时 char **environ 会发生什么。然后 environ 可能指向其他地方(重新分配时,可能取决于系统实现)。如果我们坚持传递给 main 的参数并将其传递给需要它的函数,则此指针可能不再指向当前环境。