_dupenv_s, _wdupenv_s
获取当前环境的值。
重要
此 API 不能在运行时的窗口执行的应用程序。有关更多信息,请参见 CRT 函数不支持与 /ZW。
errno_t _dupenv_s(
char **buffer,
size_t *numberOfElements,
const char *varname
);
errno_t _wdupenv_s(
wchar_t **buffer,
size_t *numberOfElements,
const wchar_t *varname
);
参数
buffer
存储变量值的缓冲区。numberOfElements
buffer的大小。varname
环境变量名称。
返回值
在成功的零,在失败时的错误代码。
这些功能验证方法的参数;如果 buffer 或 varname 是 NULL,参数无效处理程序调用如 参数验证所述。 如果执行允许继续,对 EINVAL 的功能集 errno 和返回 EINVAL。
如果这些函数不能分配足够的内存,这些设置 buffer 到 NULL 和 numberOfElements 为 0,并返回 ENOMEM。
备注
_dupenv_s 功能搜索环境变量列表 varname。 如果找到该变量,_dupenv_s 分配缓冲区并复制变量值到缓冲区中。 缓冲区的地址和长度。buffer 和 numberOfElements返回。 通过分配缓冲区,_dupenv_s 提供更简便的替代 getenv_s, _wgetenv_s。
备注
为调用的程序负责通过调用 free释放内存。
如果没有找到该变量,则 buffer 设置为 NULL,numberOfElements 设置为 0,因此,返回值为 0,这是因为这种情况视作错误状态。
如果您不需要缓冲区感兴趣的大小可以通过 numberOfElements的 NULL。
_dupenv_s 不区分大小写在 windows 操作系统。 _dupenv_s 使用环境的副本用全局变量指向该 _environ 访问该环境。 有关 _environ的讨论参见。getenv_s, _wgetenv_s 的备注。
在 buffer 的值是环境变量的值的副本;修改它没有对环境的效果。 使用 _putenv_s, _wputenv_s 功能修改环境变量的值。
_wdupenv_s 是 _dupenv_s的宽字符版本;_wdupenv_s 的参数是宽字符字符串。 _wenviron 全局变量是 _environ的宽字符版本。 有关更多 getenv_s, _wgetenv_s 参见中的"备注"在 _wenviron。
一般文本例程映射
TCHAR.H 实例 |
未定义的_UNICODE & _MBCS |
定义的_MBCS |
定义的_UNICODE |
---|---|---|---|
_tdupenv_s |
_dupenv_s |
_dupenv_s |
_wdupenv_s |
要求
实例 |
必需的标头 |
---|---|
_dupenv_s |
<stdlib.h> |
_wdupenv_s |
<stdlib.h> 或 <wchar.h> |
有关其他的兼容性信息,请参见中介绍的 兼容性。
示例
// crt_dupenv_s.c
#include <stdlib.h>
int main( void )
{
char *pValue;
size_t len;
errno_t err = _dupenv_s( &pValue, &len, "pathext" );
if ( err ) return -1;
printf( "pathext = %s\n", pValue );
free( pValue );
err = _dupenv_s( &pValue, &len, "nonexistentvariable" );
if ( err ) return -1;
printf( "nonexistentvariable = %s\n", pValue );
free( pValue ); // It's OK to call free with NULL
}
示例输出
pathext = .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.pl
nonexistentvariable = (null)
.NET Framework 等效项
System::Environment::GetEnvironmentVariable