Condividi tramite


_dupenv_s_dbg, _wdupenv_s_dbg

Ottiene un valore dall'ambiente corrente. Versioni di _dupenv_s, _wdupenv_s che allocano memoria con _malloc_dbg per fornire altre informazioni di debug.

Sintassi

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

Parametri

buffer
Buffer per l'archiviazione del valore della variabile.

numberOfElements
Dimensioni di buffer.

varname
Nome della variabile di ambiente.

blockType
Tipo di blocco di memoria richiesto: _CLIENT_BLOCK o _NORMAL_BLOCK.

filename
Puntatore al nome del file di origine o a NULL.

lineNumber
File di riga nel file di origine o NULL.

Valore restituito

Zero se eseguita correttamente, un codice di errore se non eseguita correttamente.

Queste funzioni convalidano i relativi parametri; se buffer o varname è NULL, il gestore di parametri non validi viene richiamato come descritto in Convalida dei parametri. Se l'esecuzione può continuare, le funzioni impostate su errno EINVALe restituiscono EINVAL.

Se queste funzioni non possono allocare memoria sufficiente, impostano su buffer NULL e numberOfElements su 0 e restituiscono ENOMEM.

Osservazioni:

Le _dupenv_s_dbg funzioni e _wdupenv_s_dbg sono identiche a _dupenv_s e _wdupenv_s tranne che, quando _DEBUG viene definito, queste funzioni usano la versione di debug di malloc, _malloc_dbgper allocare memoria per il valore della variabile di ambiente. Per informazioni sulle funzionalità di debug di _malloc_dbg, vedere _malloc_dbg.

Non è necessario chiamare queste funzioni in modo esplicito nella maggior parte dei casi. In alternativa, è possibile definire il flag _CRTDBG_MAP_ALLOC. Quando _CRTDBG_MAP_ALLOC è definito, le chiamate a _dupenv_s e _wdupenv_s vengono mappate nuovamente a _dupenv_s_dbg e _wdupenv_s_dbg rispettivamente, con blockType impostato su _NORMAL_BLOCK. Pertanto, non è necessario chiamare queste funzioni in modo esplicito, a meno che non si voglia contrassegnare i blocchi dell'heap come _CLIENT_BLOCK. Per altre informazioni sui tipi di blocco, vedere Types of blocks on the debug heap (Tipi di blocchi sull'heap di debug).

Mapping di routine di testo generico

Routine TCHAR.H _UNICODE e _MBCS non definito _MBCS definito _UNICODE definito
_tdupenv_s_dbg _dupenv_s_dbg _dupenv_s_dbg _wdupenv_s_dbg

Requisiti

Ciclo Intestazione obbligatoria
_dupenv_s_dbg <crtdbg.h>
_wdupenv_s_dbg <crtdbg.h>

Per altre informazioni sulla compatibilità, vedere Compatibility (Compatibilità).

Esempio

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

Vedi anche

Processo e controllo dell'ambiente
Costanti ambientali
getenv_s, _wgetenv_s
_putenv_s, _wputenv_s