getenv

getenv, getenv_s

在头文件中定义
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 是一个空指针

作为所有边界检查函数,只有当__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; 在<unistd.h>中,并通过主函数的可选第三个参数envp。

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

#include <stdio.h> #include <stdlib.h> 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):

扩展内容

| 用于getenv的C ++文档 |

|:----|