Compartir vía


_dupenv_s_dbg, _wdupenv_s_dbg

Obtiene un valor del entorno actual. Versiones de _dupenv_s, _wdupenv_s que asignan memoria con _malloc_dbg para proporcionar más información de depuración.

Sintaxis

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
Búfer en el que se va a almacenar el valor de la variable.

numberOfElements
Tamaño de buffer.

varname
Nombre de la variable de entorno.

blockType
Tipo de bloque de memoria solicitado: _CLIENT_BLOCK o _NORMAL_BLOCK.

filename
Puntero al nombre del archivo de código fuente o de NULL.

lineNumber
Número de línea del archivo de código fuente o NULL.

Valor devuelto

Devuelve cero si se ejecuta correctamente; devuelve un código de error si se produce un error.

Estas funciones validan sus parámetros; si buffer o varname es NULL, el controlador de parámetros no válidos se invoca como se describe en Validación de parámetros. Si la ejecución puede continuar, las funciones establecidas en errnoEINVALy devuelven EINVAL.

Si estas funciones no pueden asignar suficiente memoria, se establecen bufferNULL en y numberOfElements en 0 y devuelven ENOMEM.

Comentarios

Las _dupenv_s_dbg funciones y _wdupenv_s_dbg son idénticas a _dupenv_s y _wdupenv_s , salvo que, cuando _DEBUG se define, estas funciones usan la versión de depuración de malloc, _malloc_dbg, para asignar memoria para el valor de la variable de entorno. Para obtener información sobre las características de depuración de _malloc_dbg, vea _malloc_dbg.

No es necesario llamar explícitamente a estas funciones en la mayoría de los casos. En lugar de ello, se puede definir la marca _CRTDBG_MAP_ALLOC. Si se define _CRTDBG_MAP_ALLOC, las llamadas a _dupenv_s y _wdupenv_s se reasignan a _dupenv_s_dbg y _wdupenv_s_dbg, respectivamente, con el parámetro blockType establecido en _NORMAL_BLOCK. Por lo tanto, no es necesario llamar explícitamente a estas funciones a menos que desee marcar los bloques del montón como _CLIENT_BLOCK. Para obtener más información sobre los tipos de bloques, consulte Tipos de bloques en el montón de depuración.

Asignaciones de rutinas de texto genérico

Rutina TCHAR.H _UNICODE y _MBCS no definidos _MBCS definido _UNICODE definido
_tdupenv_s_dbg _dupenv_s_dbg _dupenv_s_dbg _wdupenv_s_dbg

Requisitos

Routine Encabezado necesario
_dupenv_s_dbg <crtdbg.h>
_wdupenv_s_dbg <crtdbg.h>

Para obtener más información sobre compatibilidad, consulte Compatibilidad.

Ejemplo

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

Consulte también

Control de procesos y entornos
Constantes de entorno
getenv_s, _wgetenv_s
_putenv_s, _wputenv_s