getenv, getenv_s
From cppreference.net
|
定义于头文件
<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
写入零(除非该指针为空),并向
value
[
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)
若找到环境变量则返回零,若未找到环境变量或发生运行时约束违规则返回非零值。出现任何错误时,向
*
len
写入零值(除非
len
是空指针)。
注释
在POSIX系统中,
环境变量
还可通过全局变量
environ
访问,该变量在
<unistd.h>
中声明为
extern
char
**
environ
;
,也可通过
main函数
的可选第三参数
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 函数 (页码: 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
|