我正在尝试编写自己的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");
}
答案 0 :(得分:2)
environ
是char**
。它指向一个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或更糟糕的随机内存。
我引用了第一个和第二个,因为没有关于如何排序环境名称字符串的定义规则,(例如,不要期望名称按字母顺序排列)。