免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 939 | 回复: 0
打印 上一主题 下一主题

对一个打印系统环境变量的小程序的不解 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-06-12 20:24 |只看该作者 |倒序浏览

               
                环境变量是针对每个程序的一组“名字=值”的配对,通常用来控制程序的行为。使用环境变量的优点在于用户可以在他们的启动文件中设置环境变量来替代一组特殊的命令行选项,但也可能会悄悄改变你的程序行为。总之,很多事物都是一把双刃剑,环境变量也不例外。
下面这个小程序可以打印你的系统中全部的环境变量,程序很简单,但看起来有点奇怪。
#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
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP