Поделиться через


_dupenv_s_dbg, _wdupenv_s_dbg

Получают значение из текущей среды. Версии, _wdupenv_s которые выделяют память для _malloc_dbg предоставления дополнительных сведений _dupenv_sоб отладке.

Синтаксис

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

Параметры

buffer
Буфер для хранения значения переменной.

numberOfElements
Размер buffer.

varname
Имя переменной среды.

blockType
Запрошенный тип блока памяти: _CLIENT_BLOCK или _NORMAL_BLOCK.

filename
Указатель на имя исходного файла или NULL.

lineNumber
Номер строки в исходном файле или NULL.

Возвращаемое значение

Нуль при успешном выполнении, код ошибки при сбое.

Эти функции проверяют их параметры; Если buffer или varname есть NULL, обработчик недопустимых параметров вызывается, как описано в разделе "Проверка параметров". Если выполнение разрешено продолжать, функции, заданные errno как EINVAL, и возвращаются EINVAL.

Если эти функции не могут выделить достаточно памяти, они задают buffer значение NULLnumberOfElements 0 и возвращаются ENOMEM.

Замечания

_wdupenv_s_dbg Функции _dupenv_s_dbg идентичны и _wdupenv_s за _dupenv_s исключением того, что при _DEBUG определении эти функции используют отладочную версию malloc, _malloc_dbgчтобы выделить память для значения переменной среды. Дополнительные сведения о функциях отладки _malloc_dbgсм. в статье _malloc_dbg.

В большинстве случаев эти функции не нужно вызывать явным образом. Вместо этого можно определить флаг _CRTDBG_MAP_ALLOC. Если определен флаг _CRTDBG_MAP_ALLOC, вызовы функций _dupenv_s и _wdupenv_s повторно сопоставляются с _dupenv_s_dbg и _wdupenv_s_dbg соответственно, а для параметра blockType задается флаг _NORMAL_BLOCK. Таким образом, вам не нужно явно вызывать эти функции, если вы не хотите пометить блоки кучи как _CLIENT_BLOCK. Дополнительные сведения о типах блоков см. в разделе Типы блоков в отладочной куче.

Сопоставления подпрограмм универсального текста

Подпрограмма TCHAR.H _UNICODE и _MBCS не определен _MBCS Определенные _UNICODE Определенные
_tdupenv_s_dbg _dupenv_s_dbg _dupenv_s_dbg _wdupenv_s_dbg

Требования

Маршрут Обязательный заголовок
_dupenv_s_dbg <crtdbg.h>
_wdupenv_s_dbg <crtdbg.h>

Дополнительные сведения о совместимости см. в разделе Совместимость.

Пример

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

См. также

Управление процессами и средой
Константы окружающей среды
getenv_s, _wgetenv_s
_putenv_s, _wputenv_s