命名空间
变体
操作

getenv、getenv_s

来自 cppreference.com
< c‎ | program
在头文件 <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 访问,该变量在<unistd.h>中声明为 extern char **environ;,以及通过 主函数 的可选第三个参数 envp 访问。

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

[编辑] 示例

#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 函数 (p: TBD)
  • K.3.6.2.1 getenv_s 函数 (p: TBD)
  • C17 标准 (ISO/IEC 9899:2018)
  • 7.22.4.6 getenv 函数 (p: 256-257)
  • K.3.6.2.1 getenv_s 函数 (p: 440-441)
  • 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 函数

[编辑] 另请参见

C++ 文档 for getenv