Freigeben über


_dupenv_s_dbg, _wdupenv_s_dbg

Ruft einen Wert aus der aktuellen Umgebung ab. Versionen von _dupenv_s, _wdupenv_s die Arbeitsspeicher _malloc_dbg zuweisen, um weitere Debuginformationen bereitzustellen.

Syntax

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

Parameter

buffer
Puffer zum Speichern des Variablenwerts.

numberOfElements
Größe von buffer.

varname
Umgebungsvariablenname.

blockType
Angeforderter Typ des Speicherblocks: _CLIENT_BLOCK oder _NORMAL_BLOCK.

filename
Zeiger zum Namen der Quelldatei oder NULL.

lineNumber
Zeilennummer in der Quelldatei oder NULL.

Rückgabewert

Null bei Erfolg, ein Fehlercode, wenn ein Fehler auftritt.

Diese Funktionen überprüfen ihre Parameter; wenn buffer oder varname ist NULL, wird der ungültige Parameterhandler aufgerufen, wie in der Parameterüberprüfung beschrieben. Wenn die Ausführung fortgesetzt werden darf, werden die auf die Funktionen festgelegt errnoEINVALund zurückgegeben EINVAL.

Wenn diese Funktionen nicht genügend Arbeitsspeicher zuordnen können, legen buffer sie auf NULL und numberOfElements auf 0 fest und geben sie zurück ENOMEM.

Hinweise

Die _dupenv_s_dbg Funktionen und _wdupenv_s_dbg Funktionen sind identisch mit _dupenv_s und _wdupenv_s außer dass diese Funktionen, wenn _DEBUG definiert, die Debugversion von malloc, _malloc_dbgverwenden, um Speicher für den Wert der Umgebungsvariablen zuzuweisen. Informationen zu den Debugfeatures von _malloc_dbg, finden Sie unter _malloc_dbg.

In den meisten Fällen müssen Sie diese Funktionen nicht explizit aufrufen. Stattdessen können Sie das _CRTDBG_MAP_ALLOC-Flag definieren. Wenn _CRTDBG_MAP_ALLOC definiert ist, werden Aufrufe von _dupenv_s und _wdupenv_s zu _dupenv_s_dbg bzw. _wdupenv_s_dbg neu zugeordnet, wobei blockType auf _NORMAL_BLOCK festgelegt wird. Daher müssen Sie diese Funktionen nicht explizit aufrufen, es sei denn, Sie möchten die Heapblöcke als _CLIENT_BLOCK. Weitere Informationen zu den Blocktypen finden Sie unter Blocktypen auf dem Debugheap.

Generische Textroutinzuordnungen

TCHAR.H-Routine _UNICODE und _MBCS nicht definiert _MBCS Definiert _UNICODE Definiert
_tdupenv_s_dbg _dupenv_s_dbg _dupenv_s_dbg _wdupenv_s_dbg

Anforderungen

Routine Erforderlicher Header
_dupenv_s_dbg <crtdbg.h>
_wdupenv_s_dbg <crtdbg.h>

Weitere Informationen zur Kompatibilität finden Sie unter Kompatibilität.

Beispiel

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

Siehe auch

Prozess- und Umgebungskontrolle
Umweltkonstanten
getenv_s, _wgetenv_s
_putenv_s, _wputenv_s