- 论坛徽章:
- 0
|
环境变量是针对每个程序的一组“名字=值”的配对,通常用来控制程序的行为。使用环境变量的优点在于用户可以在他们的启动文件中设置环境变量来替代一组特殊的命令行选项,但也可能会悄悄改变你的程序行为。总之,很多事物都是一把双刃剑,环境变量也不例外。
下面这个小程序可以打印你的系统中全部的环境变量,程序很简单,但看起来有点奇怪。
#include
extern char **environ;
int main(int argc, char **argv)
{
int i;
if(environ != NULL)
{
for(i = 0; environ !=NULL; i++)
{
printf("%s\n", environ);
}
}
return 0;
}
我之所以说它奇怪是因为其中一行代码:extern char **environ。在C语言中,extern所描述的变量是来自其他源程序文件中的变量,但这里我们并没有明确的包含其他源程序文件。
我所看的书关于这个问题的解释是这样的:外部变量enviorn提供的访问环境变量的方式与main()函数中的argv提供的访问命令行参数的方式是一样的。区别在于你必须自己声明environ变量。虽然环境变量由POSIX标准化了,但是任何标准化过的头文件都没有专门声明environ,这似乎是从过去的习惯延续过来的。
我让一个同学帮我在Windows环境下用VS.net 2003测试了上面的程序,的确可以运行。但后来,我切换到Windows下,用VS.net 2005测试了一下,编译失败,提示environ未定义。后来,我将代码修改如下,就没有问题了.
#include
#include
int main(int argc, char **argv)
{
int i;
if(environ != NULL)
{
for(i = 0; environ !=NULL; i++)
{
printf("%s\n", environ);
}
}
return 0;
}
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/18537/showart_127079.html |
|