如何获取 C 和/或 C++ 中所有环境变量的列表?
我知道 getenv
可以用来读取环境变量,但我如何将它们全部列出呢?
原文由 Jay 发布,翻译遵循 CC BY-SA 4.0 许可协议
如何获取 C 和/或 C++ 中所有环境变量的列表?
我知道 getenv
可以用来读取环境变量,但我如何将它们全部列出呢?
原文由 Jay 发布,翻译遵循 CC BY-SA 4.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);
}
}
说明:
在 Linux、Windows、Solaris、AIX 上成功测试。
也在新版本的 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 中没有任何消息。
这种方法的优点是,如果您不允许修改 main() 函数并添加 envp[]
,它也是合适的。
关于 GetEnvironmentStrings(),它返回给我一个空列表。可能它适用于 C++ 而不是 C。我没有调查它。
原文由 Alexander Samoylov 发布,翻译遵循 CC BY-SA 4.0 许可协议
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
3 回答3.4k 阅读
1 回答1.6k 阅读✓ 已解决
环境变量可用于
main()
作为envp
参数 - 以空字符结尾的字符串数组: