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


_dupenv_s_dbg, _wdupenv_s_dbg

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

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 в значение NULL и numberOfElements в значение 0, и возвращают ENOMEM.

Заметки

Функции _dupenv_s_dbg и _wdupenv_s_dbg совпадают с _dupenv_s и _wdupenv_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)

Эквивалент в .NET Framework

System::Environment::GetEnvironmentVariable

См. также

Ссылки

Управление процессами и средой

Константы среды

getenv_s, _wgetenv_s

_putenv_s, _wputenv_s