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(除非是NULL),而且写入的字节数会被存储于用户提供的位置*len(除非是NULL)。若环境变量未设置于环境中,则*len会被写入零(除非是NULL),且'\0'会被写入value[0](除非是NULL)。另外,运行时会检测下列错误并调用当前安装的强制处理函数:
  • name是空指针
  • valuesz大于RSIZE_MAX
  • value是空指针且valuesz非零
如同所有边界检查函数,getenv_s只保证实现定义了__STDC_LIB_EXT1__,且用户在包含stdlib.h前将__STDC_WANT_LIB_EXT1__定义为整数常量1情况下可用。

目录

[编辑] 参数

name - 标识要查找的环境变量名称的空终止字符串
len - 指向用户提供的位置,getenv_s将会在其中存储环境变量的长度
value - 指向用户提供的字符数组,getenv_s将会在其中存储环境变量内容
valuesz - 允许getenv_s对目标写入的最大字节数(缓冲区大小)

[编辑] 返回值

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)
{
    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 standard (ISO/IEC 9899:2011):
  • 7.22.4.6 The getenv function (p: 352-353)
  • K.3.6.2.1 The getenv_s function (p: 606-607)
  • C99 standard (ISO/IEC 9899:1999):
  • 7.20.4.5 The getenv function (p: 317)
  • C89/C90 standard (ISO/IEC 9899:1990):
  • 4.10.4.4 The getenv function

[编辑] 参阅

getenvC++文档