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;
}测试结果见附图