为了得到在环境变量C
程序,可以使用下列内容:
-
getenv()
-
extern char **environ;
但比上述提到的其它中,使用char *envp[]
作为第三个参数main()
以获得所考虑的标准的一部分的环境变量?
#include <stdio.h>
int main(int argc, char *argv[], char *envp[])
{
while(*envp)
printf("%s\n",*envp++);
}
是char *envp[]
便携?
该函数getenv
是由C标准中指定的唯一的一个。 功能putenv
和EXTERN environ
是POSIX特定的。
编辑
的main
参数envp
不是由POSIX规定,但广泛支持。
访问环境表的另一种方法是声明一个第三个参数main()函数:
int main(int argc, char *argv[], char *envp[])
该参数然后可以在相同的方式ENVIRON进行处理,条件是其范围是本地主()的差异。 尽管此功能被广泛地在UNIX系统上实现的,它的使用应避免以来,除了范围的限制, 它不是在SUSv3规定 。
这是不可移植。 *envp[]
是一个传统的UNIX的事情,也不是所有现代UNIX系统中实现它。
另外,作为一个侧面说明,你可以通过做了一个指针遍历访问envp *argv[]
满溢...但我不认为这可以被认为是安全的编程。 如果你看一看进程的内存映射,你会看到envp[]
就在上面argv[]
该标准描述了两种格式的main
(见5.1.2.2.1的C99标准(PDF) )
一) int main(void)
和
b)中int main(int argc, char **argv)
或等效
并且它允许实现来定义其他格式(其可以允许一个第三参数)
c)或在一些其它实现定义的方式。