命名空间
变体
操作

getenv, getenv_s

来自 cppreference.cn
< c‎ | 程序
定义于头文件 <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) 相同,除了环境变量的值被写入用户提供的缓冲区 value (除非为空),并且写入的字节数存储在用户提供的位置 *len (除非为空)。如果环境变量未在环境中设置,则将零写入 *len (除非为空),并将 '\0' 写入 value[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) 如果找到环境变量则为零,如果未找到或发生运行时约束冲突则为非零。在任何错误时,将零写入 *len (除非 len 是空指针)。

[编辑] 注释

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

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

[编辑] 示例

#include <stdio.h>
#include <stdlib.h>
 
int main(void)
{
    const char *name = "PATH";
    const char *env_p = getenv(name);
    if (env_p)
        printf("Your %s is %s\n", name, env_p);
}

可能的输出

Your PATH is /home/gamer/.local/bin:/usr/local/bin:/usr/bin:/bin:/usr/share/games

[编辑] 参考

  • C23 标准 (ISO/IEC 9899:2024)
  • 7.22.4.6 getenv 函数 (页码: 待定)
  • K.3.6.2.1 getenv_s 函数 (页码: 待定)
  • C17 标准 (ISO/IEC 9899:2018)
  • 7.22.4.6 getenv 函数 (页码: 256-257)
  • K.3.6.2.1 getenv_s 函数 (页码: 440-441)
  • C11 标准 (ISO/IEC 9899:2011)
  • 7.22.4.6 getenv 函数 (页码: 352-353)
  • K.3.6.2.1 getenv_s 函数 (页码: 606-607)
  • C99 标准 (ISO/IEC 9899:1999)
  • 7.20.4.5 getenv 函数 (页码: 317)
  • C89/C90 标准 (ISO/IEC 9899:1990)
  • 4.10.4.4 getenv 函数

[编辑] 参见

C++ 文档 关于 getenv