1. 在c中,main函数的前两个参数argc, argv被很多人熟悉,但main函数还有第三个参数------arge。main的第三个参数里存的是系统变量,所以可以通过这个参数获得系统环境变量
#include <stdio.h>
int main(int argc, char** argv, char** arge)
{
while(*arge)
{
printf("%s\n", *arge++);
}
return 0;
}
2. 系统包含一个environ指向环境变量的列表
#include <stdio.h>
#include <stdlib.h>
extern char** environ;
int main(int argc, char** argv, char** arge)
{
while(*environ)
{
printf("%s\n", *environ++);
}
return 0;
}
3.获取某个环境变量值可以使用getenv()函数
include <stdlib.h>
char *getenv(const char *name);
描述:getenv函数在环境列表中寻找name,并且返回对应到变量值
返回值:如果存在返回该环境值,不存在返回NULL
#include <stdio.h>
#include <stdlib.h>
main()
{
printf("%s\n", getenv("PATH"));
}
4.设置和删除环境变量
#include <stdio.h>
#include <stdlib.h>
int main()
{
int r;
r = setenv("noexist", "noexist-value", 0); //noexist不存在,将在环境列表中创建,并且值为noexist-value
if(-1 == r) exit(-1);
printf("%s\n", getenv("noexist"));
sleep(2);
r = unsetenv("noexist"); //删除环境变量
if(0 == r)
printf("删除环境变量成功\n");
}
自己在尝试时出现了段错误,源代码:
#include<stdio.h>
#include<stdlib.h>
#include<memory.h>
extern char** environ;
int main(int argc, char** argv, char** arge)
{
while(*environ)
{
printf("%s\n", *environ++);
}
printf("%s\n",p);
return 0;
}
错误:
错误原因:
由于再linux中,环境变量存储在environ字符串数组指针中,再第一个while循环中我尝试遍历environ,但结束后enviorn已经指向了结束符号。
如果这时出现了段错误,说明getenv()函数,检索的表为environ数组,因此将environ数组遍历后恢复就可以正常运行了:
#include<stdio.h>
#include<stdlib.h>
#include<memory.h>
extern char** environ;
int main(int argc, char** argv, char** arge)
{
int count = 0;
while(*environ)
{
count++;
printf("%s\n", *environ++);
}
environ -= count;
printf("%s\n",p);
return 0;
}
运行结果: