| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1214 人关注过本帖
标题:C中的环境变量相关编程
只看楼主 加入收藏
vfdff
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:2172
专家分:425
注 册:2005-7-15
结帖率:79.17%
收藏
 问题点数:0 回复次数:4 
C中的环境变量相关编程
1. 如何从程序中获得环境变量?
获得一个环境变量可以通过调用‘getenv()’函数完成。

     #include <stdlib.h>

     char *getenv(const char *name);
2. 如何从程序中设置环境变量?   
设置一个环境变量可以通过调用‘putenv()’函数完成。

     #include <stdlib.h>

     int putenv(char *string);
      
变量string应该遵守"name=value"的格式。已经传递给putenv函数的字符串*不*能够被释放或变成无效,
因为一个指向它的指针将由‘putenv()’保存。这意味着它必须是在静态数据区中或是从堆(heap)分配的。
如果这个环境变量被另一个‘putenv()’的调用重新定义或删除,上述字符串可以被释放。
#include <stdio.h>
#include <stdlib.h>
int main()
{
    printf("%s\n",getenv("TEST"));
    putenv("TEST=zhong");
    printf("%s\n",getenv("TEST"));
    return 0;
}
我们经常看到的 int setenv(const char *name,  const char *value, int replace)却并没有在VC的标准库中,怎么办呢?
自己动手,丰衣足食:)使用getenv和putenv函数进行扩展即可
具体代码如下:
int setenv(const char *name,  const char *value, int replace)
{
   char *envstr;

   if (name == NULL || value == NULL) return 1;
   if (getenv(name) ==NULL) // 未定义
   {
        envstr = (char *) malloc(strlen(name) + strlen(value) + 2);
        sprintf (envstr, "%s=%s", name, value);
        if (putenv(envstr)) return 1;
   }
   else // 定义
   {
        envstr = (char *) malloc(strlen(name) + strlen(value) + 4 + strlen(getenv(name)));
        sprintf (envstr, "%s=%s;", name, value);
        strcat(envstr,getenv(name));
        if (putenv(envstr)) return 1;
   }
   return 0;
}
测试代码:
int main()
{
    printf("%s\n",getenv("TEST"));
    putenv("TEST=zhong");
    printf("%s\n",getenv("TEST"));

    setenv("MAIL","zhong1",1);
    printf("%s\n",getenv("MAIL"));
    setenv("MAIL","zhong1",1);
    printf("%s\n",getenv("MAIL"));

    return 0;
}测试结果见附图

测试结果.JPG (8.61 KB)
图片附件: 游客没有浏览图片的权限,请 登录注册
搜索更多相关主题的帖子: 环境变量 putenv char name 函数 
2008-05-29 13:19
vfdff
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:2172
专家分:425
注 册:2005-7-15
收藏
得分:0 
使用 注册表方式设置环境变量
设置环境变量通过程序可以分两步来操作:

1、通过修改注册表项来修改环境变量存储的数据

用户环境变量列表的注册表键:
HKEY_CURRENT_USER\Environment

系统环境变量列表的注册表键:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment

2、当修改完环境变量的注册表项后,可以通过下面的代码来通知环境变量更新
DWORD dwReturnValue = 0;
SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, 0,
    (LPARAM) "Environment", SMTO_ABORTIFHUNG,5000, &dwReturnValue);
 

eg:

reg add HKEY_CURRENT_USER\Environment /v zzz /d qqzzz
2008-06-14 23:41
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
第一种是临时的,第二种是全局的。
话说,涉及到环境变量,我宁愿写BAT……

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-06-15 01:14
vfdff
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:2172
专家分:425
注 册:2005-7-15
收藏
得分:0 
回复 3# StarWing83 的帖子
BAT也是临时的
2008-06-15 11:52
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
BAT是临时的没错,不过如果在bat里面写reg .....

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-06-15 16:11
快速回复:C中的环境变量相关编程
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016416 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved