是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