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

新手上路,请多包涵

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

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

原文由 Jay 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.6k
2 个回答

环境变量可用于 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;
}

原文由 Alex Brown 发布,翻译遵循 CC BY-SA 3.0 许可协议

对我来说,或多或少可移植的 C 代码解决方案如下:

 #include <stdlib.h>
void printenv() {
    char ** env;
#if defined(WIN) && (_MSC_VER >= 1900)
    env = *__p__environ();
#else
    extern char ** environ;
    env = environ;
#endif
    for (env; *env; ++env) {
        printf("%s\n", *env);
    }
}

说明:

  1. 在 Linux、Windows、Solaris、AIX 上成功测试。

  2. 也在新版本的 Visual Studio 上成功测试。关键是,至少从 VS 2017(可能更早)开始, environ 全局变量不再被识别。如果你打开头文件 C:\Program Files\Windows Kits\10\Include\xxxx\ucrt\stdlib.h 你会看到这个全局变量被替换为函数 __p__environ() 。不幸的是,它没有很好地记录。在 https://learn.microsoft.com/en-us/cpp/c-runtime-library/environ-wenviron?view=msvc-170 中没有任何消息。

  3. 这种方法的优点是,如果您不允许修改 main() 函数并添加 envp[] ,它也是合适的。

  4. 关于 GetEnvironmentStrings(),它返回给我一个空列表。可能它适用于 C++ 而不是 C。我没有调查它。

原文由 Alexander Samoylov 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题