getenv、getenv_s
来自 cppreference.com
在头文件 <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
|