有人可以向我解释一下environ变量在C ++中是如何工作的吗?

时间:2013-02-08 19:36:49

标签: c++ getenv

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

如果它是全局的,为什么我不能在我的函数中打印它? environ是一个字符串还是一组字符?为什么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");
}

3 个答案:

答案 0 :(得分:2)

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

std::cout << environ[0];

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

但是,environ不是C ++的功能,不可移植。它来自POSIX定义的unistd.h标题。

答案 1 :(得分:1)

它包含env的char **。变量

extern char **environ;

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

答案 2 :(得分:0)

只需添加;

  

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

environ处理指针数组,每个指针指向字符串的第一个地址。环境不是一个字符串,它是一串字符串(好吧,环境可能是空的,所以&#34;束&#34;可以为零)。

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]指向segfault land或更糟糕的随机内存

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