%>
从当前环境中获取值。 _dupenv_s
的版本,_wdupenv_s
使用 _malloc_dbg
分配内存以提供更多调试信息。
语法
errno_t _dupenv_s_dbg(
char **buffer,
size_t *numberOfElements,
const char *varname,
int blockType,
const char *filename,
int lineNumber
);
errno_t _wdupenv_s_dbg(
wchar_t **buffer,
size_t * numberOfElements,
const wchar_t *varname,
int blockType,
const char *filename,
int lineNumber
);
参数
buffer
用于存储变量值的缓冲区。
numberOfElements
buffer
的大小。
varname
环境变量名称。
blockType
内存块的请求类型:_CLIENT_BLOCK
或 _NORMAL_BLOCK
。
filename
指向源文件名称的指针或 NULL
。
lineNumber
源文件中的行号或 NULL
。
返回值
如果成功,则为零;如果失败,则为错误代码。
这些函数将验证其参数;如果 buffer
或 varname
是 NULL
,则调用的参数处理程序无效,如参数验证中所述。 如果允许执行继续,则这些函数将 errno
设置为 EINVAL
并返回 EINVAL
。
如果这些函数无法分配足够的内存,则它们会将 buffer
设置为 NULL
并将 numberOfElements
设置为 0,然后返回 ENOMEM
。
备注
_dupenv_s_dbg
和 _wdupenv_s_dbg
函数与 _dupenv_s
和 _wdupenv_s
完全相同,只是当定义 _DEBUG
时,这些函数将使用 malloc
、_malloc_dbg
的调试版本来为环境变量的值分配内存。 有关 _malloc_dbg
的调试功能的信息,请参阅 _malloc_dbg
。
在大多数情况下,无需显式调用这些函数。 可以改为定义 _CRTDBG_MAP_ALLOC
标志。 定义 _CRTDBG_MAP_ALLOC
后,对 _dupenv_s
和 _wdupenv_s
的调用将分别重新映射到 _dupenv_s_dbg
和 _wdupenv_s_dbg
,同时会将 blockType
设置为 _NORMAL_BLOCK
。 因此,无需显式调用这些函数,除非你希望将堆块标记为 _CLIENT_BLOCK
。 有关块类型的详细信息,请参阅调试堆中的块类型。
一般文本例程映射
TCHAR.H 例程 | _UNICODE 和 _MBCS 未定义 |
_MBCS 已定义 |
_UNICODE 已定义 |
---|---|---|---|
_tdupenv_s_dbg |
_dupenv_s_dbg |
_dupenv_s_dbg |
_wdupenv_s_dbg |
要求
例程 | 必需的标头 |
---|---|
_dupenv_s_dbg |
<crtdbg.h> |
_wdupenv_s_dbg |
<crtdbg.h> |
有关兼容性的详细信息,请参阅 兼容性。
示例
// crt_dupenv_s_dbg.c
#include <stdlib.h>
#include <crtdbg.h>
int main( void )
{
char *pValue;
size_t len;
errno_t err = _dupenv_s_dbg( &pValue, &len, "pathext",
_NORMAL_BLOCK, __FILE__, __LINE__ );
if ( err ) return -1;
printf( "pathext = %s\n", pValue );
free( pValue );
err = _dupenv_s_dbg( &pValue, &len, "nonexistentvariable",
_NORMAL_BLOCK, __FILE__, __LINE__ );
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)