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

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;
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值