getenv, getenv_s
来自 cppreference.cn
定义于头文件 <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
|