【问题标题】:Can someone explain to me how the environ variable works in C++? [duplicate]有人可以向我解释一下环境变量在 C++ 中是如何工作的吗? [复制]
【发布时间】:2013-02-08 19:36:49
【问题描述】:

我正在尝试编写自己的 getenv 版本。我还没有开始,所以我想先了解一下环境。

如果它是全局的,为什么我不能在我的函数中打印它? environ 是字符串还是字符数组?为什么环境是双指针?谢谢。

#include <iostream>
#include <string>
#include <stdlib.h>
void myenv(char*);

void myenv(char* name)
{
std::cout<<environ;
}

int main(int argc, char** argv, char** environ)
{
myenv("PATH");
}

【问题讨论】:

    标签: c++ getenv


    【解决方案1】:

    environchar**。它指向char* 的数组,每个数组都指向char 的字符串。所以它就像一个字符串数组。例如,environ[0] 是一个以 null 结尾的字符串。尝试打印出来:

    std::cout << environ[0];
    

    每个字符串都是name=value 形式的环境变量。它们对应于当前进程的环境变量。

    但是,environ 不是 C++ 的一个特性并且是不可移植的。它来自 POSIX 定义的 unistd.h 标头。

    【讨论】:

      【解决方案2】:

      它是一个包含环境的char **。变量

      extern char **environ;

      http://pubs.opengroup.org/onlinepubs/007908799/xsh/environ.html

      【讨论】:

        【解决方案3】:

        只是添加;

        environ 是字符串还是字符数组? environ 为什么是双指针?

        environ 寻址一个指针数组,每个指针指向一个字符串的第一个地址。环境不是一个字符串,而是一堆字符串(嗯,环境可以是空的,所以“bunch”可以为零)。

        environ[0] contains a pointer to the 'first' environment variable.
        environ[1] contains a pointer to the 'second'.
        
        environ[0][0] would reference the first character of the 'first' name in the environment.
        environ[1][0] would reference the first character of the 'second' name.
        

        或者,如果没有至少两个环境变量,environ[1] 指向段错误区域或更糟的是随机内存

        我引用了第一个和第二个,因为对于环境名称字符串的排序方式没有定义的规则,(例如,不要期望名称是按字母顺序排列的)。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-08-18
          • 2017-10-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-06-03
          相关资源
          最近更新 更多