c语言 getenv函数,getenv - [ C语言中文开发手册 ] - 在线原生手册 - php中文网

本文详细介绍了C语言中获取环境变量的两个函数:getenv和getenv_s。getenv函数简单直接但线程安全性不确定,而getenv_s则提供了一种更安全的方式,允许用户指定缓冲区大小并进行边界检查。同时,文章提到了C11标准中的getenv_s函数及其错误处理机制,以及在多线程环境下使用这两个函数时需要注意的问题。
摘要由CSDN通过智能技术生成

在头文件中定义char * getenv(const char * name);(1)

errno_t getenv_s(size_t * restrict len,char * restrict value,rsize_t valuesz,const char * restrict name);(2)(自C11以来)

1)name在主机指定的环境列表中搜索具有名称的环境变量,并返回指向与匹配的环境变量关联的字符串的指针。环境变量和改变它的方法的集合是实现定义的。

这个函数不需要是线程安全的。另一个对getenv的调用,以及对POSIX函数setenv(),unsetenv()和putenv()的调用可能会使先前调用返回的指针无效,或者修改先前调用中获得的字符串。

修改由getenv返回的字符串将调用未定义的行为。

2)与(1)相同,只是将环境变量的值写入用户提供的缓冲区值(除非为空),并且写入的字节数存储在用户提供的位置* len(除非为空)。 如果环境变量未在环境中设置,则将0写入* len(除非为null),并且将'\ 0'写入值[0](除非为空)。 另外,在运行时检测到以下错误并调用当前安装的约束处理函数:

name 是一个空指针

valuesz 大于 RSIZE_MAX

value是一个空指针,valuesz不为零

作为所有边界检查函数,只有当__STDC_LIB_EXT1__由实现定义并且用户在包含stdlib.h之前将__STDC_WANT_LIB_EXT1__定义为整数常量1时,getenv_s才能保证可用。

参数

name-以空字符结尾的字符串标识要查找的环境变量的名称len-指向用户提供的位置的指针,其中getenv_s将存储环境变量的长度

value-指向用户提供的字符数组的指针,其中getenv_s将存储环境变量的内容

valuesz-允许getenv_s写入dest的最大字符数(缓冲区的大小)

返回值

1)如果没有找到这样的变量,则标识环境变量或空指针的值的字符串。

2)如果找到环境变量,则为零;如果未发现运行时常量违例发生,则为非零。 在任何错误上,将0写入* len(除非len是空指针)。

注意

在POSIX系统上,环境变量也可以通过全局变量environ访问,声明为extern char ** environ; 在中,并通过主函数的可选第三个参数envp。

调用getenv_s时,值为null的指针和valuesz的值为零用于确定保存整个结果所需的缓冲区的大小。

#include #include 

int main(void){

char *env_p = getenv("PATH");    if (env_p)        printf("PATH = %s\n", env_p);}

可能的输出:

PATH = /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

参考

C11标准(ISO / IEC 9899:2011):7.22.4.6 getenv函数(p:352-353)

K.3.6.2.1 getenv_s函数(p:606-607)

C99标准(ISO / IEC 9899:1999):7.20.4.5 getenv函数(p:317)

C89 / C90标准(ISO / IEC 9899:1990):4.10.4.4 getenv函数

扩展内容

| 用于getenv的C ++文档 |

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值