因此,我正在尝试构建一个可以添加,删除,获取和打印环境的简单外壳。我知道来自父进程的环境副本是通过C ++程序中的int main()来实现的,但是该环境副本在setenv调用之后是否永远不会得到更新?
我是否必须自己管理环境并将环境的副本保存在我的Shell中,因为当我执行setenv调用然后打印环境时;我的变量和值不存在。如果我进行getenv调用,则该变量仍然 那里。最后,我缺少了一些非常简单的东西。谢谢
这不是家庭作业项目,但这是我正在谈论的示例。
#include <iostream>
#include <stdlib.h>
int main(int argc, char * argv[], char * envp[]) {
setenv("My_Example", "For StackOverFlow because I'm dumb. Thanks.", 0);
for (char **env = envp; *env != 0; env++)
std::cout << *env << std::endl;
std::cout << "---------------------------------------------" << std::endl;
std::cout << "Value: " << getenv("My_Example") << std::endl;
return 0;
}
答案 0 :(得分:1)
envp
是调用main
时环境的副本。调用setenv
后,环境已更改,并且envp
中的相应条目已过期。
答案 1 :(得分:1)
envp
不是main
的标准参数。其含义取决于实现方式。在您的实现上,envp
似乎是调用main
时的原始环境。
猜测:Windows?因为它的环境实际上是wchar_t[]
,而不是char []
。这意味着char** envp
的结果是从wchar_t**
转换而来的。
答案 2 :(得分:0)