%>

从当前环境中获取值。 _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

返回值

如果成功,则为零;如果失败,则为错误代码。

这些函数将验证其参数;如果 buffervarnameNULL,则调用的参数处理程序无效,如参数验证中所述。 如果允许执行继续,则这些函数将 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)

另请参阅

进程和环境控制
环境常数
%>
%>