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

为了在C程序中获得一个环境变量,可以使用下面的代码:

  • getenv()
  • extern char **environ;
  • 但除了上面提到的,使用char *envp[]作为main()的第三个参数来使环境变量成为标准的一部分?

    #include <stdio.h>
    
    int main(int argc, char *argv[], char *envp[])
    {
        while(*envp)
            printf("%sn",*envp++);
    }
    

    char *envp[]便携?


    函数getenv是C标准中唯一指定的函数。 函数putenv和extern environ都是POSIX特有的。

    编辑

    main参数envp不是由POSIX指定的,但得到了广泛的支持。

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

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

    然后可以用与environ相同的方式处理这个参数,区别在于它的作用域是main()。 尽管此功能在UNIX系统上得到广泛实施,但应避免使用此功能,因为除了范围限制外, SUSv3中未详细说明


    它不是便携式的。 *envp[]是一个传统的UNIX事物,并不是所有的现代UNIX系统都实现它。

    另外作为一个便笺,你可以通过遍历*argv[]遍历它来访问envp,但是我不认为这可以被认为是安全的编程。 如果你看看进程内存映射,你会看到envp[]就在argv[]之上。


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

    a) int main(void)

    b) int main(int argc, char **argv)或等价物

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

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

    链接地址: http://www.djcxy.com/p/28729.html

    上一篇: Is char *envp[] as a third argument to main() portable

    下一篇: int main(int argc, char *argv[])