_dupenv_s_dbg, _wdupenv_s_dbg
Pobieranie wartości z bieżącego środowiska. Wersje _dupenv_s, _wdupenv_s że przydzielić pamięci z _malloc_dbg dodatkowe informacje debugowania.
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
);
Parametry
buffer
Bufor do przechowywania wartości zmiennej.numberOfElements
Rozmiar buffer.varname
Nazwa zmiennej środowiskowej.blockType
Zażądał typu blok pamięci: _CLIENT_BLOCK lub _NORMAL_BLOCK.filename
Wskaźnik myszy na nazwę pliku źródłowego lub NULL.linenumber
Numer wiersza na plik źródłowy lub NULL.
Wartość zwracana
Zero, jeśli operacja się powiedzie; w przeciwnym razie, kod błędu.
Te funkcje sprawdzają poprawność parametrów; jeśli buffer lub varname jest NULL niewłaściwym elementem obsługi parametrów, zgodnie z opisem w temacie Sprawdzanie poprawności parametruJeśli wykonanie może być kontynuowane, funkcje ustawiają errno jako EINVAL i zwracają EINVAL.
Jeśli te funkcje nie mogą przydzielić wystarczającej ilości pamięci, ustawiają buffer jako NULL i numberOfElements jako 0 i zwracają ENOMEM.
Uwagi
_dupenv_s_dbg i _wdupenv_s_dbg funkcje są identyczne z _dupenv_s i _wdupenv_s poza tym, kiedy _DEBUG jest zdefiniowany, tych funkcji należy użyć wersji programu debug malloc, _malloc_dbg, aby przydzielić pamięci dla wartości zmiennej środowiskowej.Aby uzyskać informacje dotyczące debugowania funkcji _malloc_dbg, zobacz _malloc_dbg.
Nie trzeba jawnie wywołana w większości przypadków te funkcje.Zamiast tego można zdefiniować flagę _CRTDBG_MAP_ALLOC.Gdy _CRTDBG_MAP_ALLOC jest zdefiniowany, wzywa do _dupenv_s i _wdupenv_s są mapowane ponownie do _dupenv_s_dbg i _wdupenv_s_dbg, odpowiednio, z blockType ustawiona na _NORMAL_BLOCK.Dzięki temu, nie trzeba jawnie wywołana tych funkcji, chyba że chcesz oznaczyć bloki sterty jako _CLIENT_BLOCK.Aby uzyskać więcej informacji dotyczących typów bloku, zobacz typów bloków na stercie debugowania.
Rutynowe mapowania zwykłego tekstu
Procedura Tchar.h |
_UNICODE & _MBCS nie zdefiniowano |
_MBCS zdefiniowano |
_UNICODE zdefiniowany |
---|---|---|---|
_tdupenv_s_dbg |
_dupenv_s_dbg |
_dupenv_s_dbg |
_wdupenv_s_dbg |
Wymagania
Procedura |
Wymagany nagłówek |
---|---|
_dupenv_s_dbg |
<crtdbg.h> |
_wdupenv_s_dbg |
<crtdbg.h> |
Dodatkowe informacje o zgodności – zobacz: Zgodność we Wprowadzeniu.
Przykład
// 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
}
Przykładowe dane wyjściowe
pathext = .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.pl
nonexistentvariable = (null)
Odpowiednik w programie .NET Framework
zmienna środowiskowa pobierania systemu