Compartilhar via


_dupenv_s_dbg, _wdupenv_s_dbg

Obter um valor do ambiente atual. Versões do _dupenv_s, _wdupenv_s que alocam memória com _malloc_dbg para fornecer mais informações de depuração.

Sintaxe

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
);

Parâmetros

buffer
Buffer para armazenar o valor da variável.

numberOfElements
Tamanho de buffer.

varname
Nome da variável de ambiente.

blockType
Tipo de bloco de memória solicitado: _CLIENT_BLOCK ou _NORMAL_BLOCK.

filename
Ponteiro para o nome do arquivo de origem ou NULL.

lineNumber
O número de linha no arquivo de origem ou NULL.

Valor retornado

Zero em caso de êxito; código de erro em caso de falha.

Essas funções validam seus parâmetros; if buffer ou varname is NULL, o manipulador de parâmetro inválido é invocado conforme descrito em Validação de parâmetro. Se a execução tiver permissão para continuar, as funções definidas errno como EINVALe retornarão EINVAL.

Se essas funções não puderem alocar memória suficiente, elas serão definidas buffer como NULL e numberOfElements como 0 e retornarão ENOMEM.

Comentários

As _dupenv_s_dbg funções and _wdupenv_s_dbg são idênticas e _wdupenv_s _dupenv_s exceto que, quando _DEBUG definidas, essas funções usam a versão de depuração de malloc, _malloc_dbg, para alocar memória para o valor da variável de ambiente. Para obter informações sobre os recursos de depuração do _malloc_dbg, consulte _malloc_dbg.

Você não precisa chamar essas funções explicitamente na maioria dos casos. Em vez disso, você pode definir o sinalizador _CRTDBG_MAP_ALLOC. Quando _CRTDBG_MAP_ALLOC é definido, as chamadas a _dupenv_s e _wdupenv_s são remapeadas para _dupenv_s_dbg e _wdupenv_s_dbg, respectivamente, com o blockType definido como _NORMAL_BLOCK. Portanto, você não precisa chamar essas funções explicitamente, a menos que queira marcar os blocos de heap como _CLIENT_BLOCK. Para obter mais informações sobre os tipos de bloco, consulte Tipos de blocos no heap de depuração.

Mapeamentos de rotina de texto genérico

Rotina TCHAR.H _UNICODE e _MBCS não definidos _MBCS definido _UNICODE definido
_tdupenv_s_dbg _dupenv_s_dbg _dupenv_s_dbg _wdupenv_s_dbg

Requisitos

Rotina Cabeçalho necessário
_dupenv_s_dbg <crtdbg.h>
_wdupenv_s_dbg <crtdbg.h>

Para obter informações sobre compatibilidade, consulte Compatibilidade.

Exemplo

// 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)

Confira também

Controle de processo e ambiente
Constantes ambientais
getenv_s, _wgetenv_s
_putenv_s, _wputenv_s