是char * envp []作为第三个参数main()的便携式是char * envp []作为第

2019-05-13 15:27发布

为了得到在环境变量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[]便携?

Answer 1:

该函数getenv是由C标准中指定的唯一的一个。 功能putenv和EXTERN environ是POSIX特定的。

编辑

main参数envp不是由POSIX规定,但广泛支持。

访问环境表的另一种方法是声明一个第三个参数main()函数:

 int main(int argc, char *argv[], char *envp[]) 

该参数然后可以在相同的方式ENVIRON进行处理,条件是其范围是本地主()的差异。 尽管此功能被广泛地在UNIX系统上实现的,它的使用应避免以来,除了范围的限制, 它不是在SUSv3规定



Answer 2:

这是不可移植。 *envp[]是一个传统的UNIX的事情,也不是所有现代UNIX系统中实现它。

另外,作为一个侧面说明,你可以通过做了一个指针遍历访问envp *argv[]满溢...但我不认为这可以被认为是安全的编程。 如果你看一看进程的内存映射,你会看到envp[]就在上面argv[]



Answer 3:

该标准描述了两种格式的main (见5.1.2.2.1的C99标准(PDF) )

一) int main(void)

b)中int main(int argc, char **argv)或等效

并且它允许实现来定义其他格式(其可以允许一个第三参数)

c)或在一些其它实现定义的方式。



Answer 4:

第三个参数是微软C和GNU GCC有效:

Visual Studio的2015年:参数主

GNU C编程教程:环境变量



文章来源: Is char *envp[] as a third argument to main() portable