非常教程

C参考手册

编程支持 | Program support

getenv

在头文件<stdlib.h>中定义

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; 在<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):
    • 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 ++文档 |

|:----|

C

C 语言是一门通用计算机编程语言,应用广泛。C 语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。