您的位置:首页 > 运维架构 > Linux

Linux系统C程序员的环境变量和环境表

2015-08-24 19:35 621 查看
C程序员的环境变量和环境表

C语言中环境存储在字符指针数组中,就是环境表;

环境表可以看成是二级指针,用来指定环境变量;

char *s[5]; //字符指针数组,元素是字符指针;

char **s; //二级指针

环境表的使用只需要写上 extern char** environ; //外部全局变量

environ就是环境表的首地址;

echo $OLDPWD

指针的回顾

指针就是一个存储另一个变量地址的变量;

int i = 10;

int *pi = &i;

pi就是指针,i就是普通整型变量;

*pi == i

&i == pi

指针的运算

支持加法和减法,但加法只能加上整数;

pi + 1 就是移动指针, 移动的字节数由指向变量的类型决定;

如果pi是 int *, 移动4个字节;

如果是 char *, 移动1个字节;

如果pi是 char **, 移动 char*的大小,即4个字节;

sizeof(指向的类型);

*p++ 先做p++再取*;但后++会在语句结束时才做;

(*p)++ 先取*再++;

如果 char** p, (*p)++导致*p移动一个字节,p不动;

char *str[5]; //指针数组,存放指针的数组(char *)str[5];

char (*str)[5]; //数组指针,指向数组的指针;

一定要多练

/*
* C程序员的环境变量与环境表练习
*/
#include <stdio.h>
#include <string.h>
int main() {
extern char **environ;    //全局变量,改变了有影响
char **p = environ;    //p是局部变量,改变了无影响
//p是字符指针数组;

//练习:写一个循环打印所有环境变量(数组元素),数组以NULL结束
while (*p /* != NULL */ ) {    //可以省略,C程序效率十分重要
printf("%s\n", *p);
/* printf("\t%p\n", p); */
p++;
}

//写一个循环,把LANG的值取出来,存入value中
//提示:比较字符串的前n个字符strncmp();
p = environ;    //指针回到开始;
char value[100] = { };
while (*p) {
if (!strncmp(*p, "LANG=", 5)){
/* printf("%s\n", *p); */
strcpy(value, (*p) + 5);
break;
}
p++;
}
printf("value = %s\n", value);

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: