C ++ getenv和setenv

时间:2018-09-28 03:56:43

标签: c++

因此,我正在尝试构建一个可以添加,删除,获取和打印环境的简单外壳。我知道来自父进程的环境副本是通过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;
}

3 个答案:

答案 0 :(得分:1)

envp是调用main时环境的副本。调用setenv后,环境已更改,并且envp中的相应条目已过期。

答案 1 :(得分:1)

envp不是main的标准参数。其含义取决于实现方式。在您的实现上,envp似乎是调用main时的原始环境。

猜测:Windows?因为它的环境实际上是wchar_t[],而不是char []。这意味着char** envp的结果是从wchar_t**转换而来的。

答案 2 :(得分:0)

documentation会让您相信

#include <unistd.h>

具有最新的环境变量cstring数组。

extern char ** environ;