%>
从当前环境中获取值。
重要
此 API 不能用于在 Windows 运行时中执行的应用程序。 有关详细信息,请参阅通用 Windows 平台应用中不支持的 CRT 函数。
语法
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
,则调用的参数处理程序无效,如参数验证中所述。 如果允许执行继续,则这些函数将 errno
设置为 EINVAL
并返回 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,因为未将这种情况视为错误条件。
如果你对缓冲区大小不感兴趣,你可以将 NULL
传递给 numberOfElements
。
在 Windows 操作系统中,_dupenv_s
不区分大小写。 _dupenv_s
使用由全局变量 _environ
指向的环境副本来访问该环境。 有关 _environ
的讨论,请参阅 getenv_s
、_wgetenv_s
中的“注解”。
buffer
中的值是环境变量值的副本;修改它不会影响环境。 请使用 _putenv_s
、_wputenv_s
函数修改环境变量的值。
_wdupenv_s
是 _dupenv_s
的宽字符版本;_wdupenv_s
的参数是宽字符字符串。 _wenviron
全局变量是 _environ
的宽字符版本。 有关 _wenviron
的详细信息,请参阅 getenv_s
、_wgetenv_s
中的“注解”。
默认情况下,此函数的全局状态范围限定为应用程序。 若要更改此行为,请参阅 CRT 中的全局状态。
一般文本例程映射
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)