getenv_s
getenv, getenv_s
在头文件 | | |
---|---|---|
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)相同,只是将环境变量的值写入用户提供的缓冲区值(除非为空),并且写入的字节数存储在用户提供的位置* len(除非为空)。 如果环境变量未在环境中设置,则将0写入* len(除非为null),并且将'\ 0'写入值[0](除非为空)。 另外,在运行时检测到以下错误并调用当前安装的约束处理函数:
name
是一个空指针
作为所有边界检查函数,只有当__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>中,并通过主函数的可选第三个参数envp。
调用getenv_s时,值为null的指针和valuesz的值为零用于确定保存整个结果所需的缓冲区的大小。
例
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
char *env_p = getenv("PATH"
if (env_p)
printf("PATH = %s\n", env_p
}
可能的输出:
PATH = /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
参考
- C11标准(ISO / IEC 9899:2011):
扩展内容
| getenv的C ++文档 |
|:----|