getenv_s, _wgetenv_s

Получает значение из окружающей среды в данный момент.Эти версии getenv, _wgetenv имеют расширения безопасности, как описано в разделе Средства безопасности в CRT.

Важное примечаниеВажно

Этот API нельзя использовать в приложениях, выполняемых в Среда выполнения Windows.Дополнительные сведения см. в разделе Функции CRT не поддерживаются при /ZW.

errno_t getenv_s( 
   size_t *pReturnValue,
   char* buffer,
   size_t numberOfElements,
   const char *varname 
);
errno_t _wgetenv_s( 
   size_t *pReturnValue,
   wchar_t *buffer,
   size_t numberOfElements,
   const wchar_t *varname 
);
template <size_t size>
errno_t getenv_s( 
   size_t *pReturnValue,
   char (&buffer)[size],
   const char *varname 
); // C++ only
template <size_t size>
errno_t _wgetenv_s( 
   size_t *pReturnValue,
   wchar_t (&buffer)[size],
   const wchar_t *varname 
); // C++ only

Параметры

  • pReturnValue
    Размер буфера, необходимо либо 0, если переменная не найдена.

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

  • numberOfElements
    Размер buffer.

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

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

Ноль при успешном; в противном случае код ошибки при сбое.

Условия возникновения ошибки

pReturnValue

buffer

numberOfElements

varname

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

NULL

любое значение

любое значение

любое значение

EINVAL

любое значение

NULL

>0

любое значение

EINVAL

любое значение

любое значение

любое значение

NULL

EINVAL

Любое из этих условий ошибки вызывают обработчик недопустимого параметра, как описано в разделе Проверка параметров.Если среда выполнения может продолжить, errno - к возвращенным функциям EINVAL и EINVAL.

Кроме того, если буфер слишком мал, эти функции возвращают ERANGE.Они не вызывают обработчик недопустимого параметра.Они записывают out необходимый размер буфера в pReturnValue, и поэтому программы позволяют вызывать функцию снова с большим буфером.

Заметки

Функция getenv_s выполняет список переменных среды для varname.getenv_s не учитывает регистр в операционной системе Windows.getenv_s и _putenv_s используют копию среды, которая указывает глобальная переменная _environ для получения среды.getenv_s работает только в структурах данных, доступные в библиотеке времени выполнения, а не в среду "сегмент", созданных для процесса операционной системой.Поэтому программ, использующих аргумент envp в main или wmain может извлечь недопустимую информацию.

_wgetenv_s — это двухбайтовая версия функции getenv_s; аргумент и возвращаемое значение _wgetenv_s являются строками двухбайтовых символов.Глобальная переменная _wenviron версия юникод _environ.

В программе многобайтовой кодировки (например, в программе ASCII однобайтовой кодировки), _wenviron - NULL, поскольку среда состоит из строк многобайтовой кодировки.Затем, при первом вызове функции _wputenv, или _wgetenv_s, если среда многобайтовой кодировки () уже существует, среда является черты создается и затем указана в _wenviron.

Аналогично в программе юникода (_wmain), _environ - NULL, поскольку среда состоит из характерных черт.Затем, при первом вызове функции _putenv, или getenv_s, если среда a (юникод) уже существует, среда многобайтовой кодировки создается и затем указана в _environ.

2 Если копии среды (многобайтовая кодировка юникод) и существуют одновременно в программе, время выполнения система должна поддерживать обе копии, и в результате более медленного выполнения.Например, при вызове _putenv, вызов _wputenv также выполняется автоматически, чтобы 2 строки среды совпадают.

Предупреждающее замечаниеВнимание

В редких случаях, когда во время выполнения система поддерживает и версию юникода и версию многобайтовой среды, 2 версии среды могут не соответствовать точно.Это происходит потому, что, хотя есть уникальный сопоставления строк многобайтовой кодировки однозначно строке юникода, сопоставление из уникального строки юникода в строке многобайтовой кодировки не обязательно должны быть уникальными.Для получения дополнительной информации см. _environ, _wenviron.

ПримечаниеПримечание

Семейство функций _putenv_s и _getenv_s не является потокобезопасным._getenv_s может вернуть указатель строки _putenv_s сбои при изменении строки и таким образом причины случайные.Убедитесь, что вызов этих функций синхронизированы.

В C, C-++ использование этих функций непосредственной перегруженными шаблона; перегруженные могут определить длину буфера автоматически и, таким образом, чтобы исключить необходимость указать аргумент размера.Для получения дополнительной информации см. Предоставляйте перегруженный шаблона.

Универсальное текстовое сопоставление функций

Функция TCHAR.H

неопределенные _UNICODE & _MBCS

определенные _MBCS

Определение _UNICODE

_tgetenv_s

getenv_s

getenv_s

_wgetenv_s

Проверка или изменение значения переменной среды TZ, используйте getenv_s, _putenv и _tzset, по мере необходимости.Дополнительные сведения о TZ см. в разделах _tzset и _daylight, _dstbias, _timezone и _tzname.

Требования

Функция

Требуемый заголовок

getenv_s

<stdlib.h>

_wgetenv_s

<stdlib.h> или <wchar.h>

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

Пример

// crt_getenv_s.c
// This program uses getenv_s to retrieve
// the LIB environment variable and then uses
// _putenv to change it to a new value.
 
#include <stdlib.h>
#include <stdio.h>

int main( void )
{
   char* libvar;
   size_t requiredSize;

   getenv_s( &requiredSize, NULL, 0, "LIB");
   if (requiredSize == 0)
   {
      printf("LIB doesn't exist!\n");
      exit(1);
   }

   libvar = (char*) malloc(requiredSize * sizeof(char));
   if (!libvar)
   {
      printf("Failed to allocate memory!\n");
      exit(1);
   }

   // Get the value of the LIB environment variable.
   getenv_s( &requiredSize, libvar, requiredSize, "LIB" );

   printf( "Original LIB variable is: %s\n", libvar );

   // Attempt to change path. Note that this only affects
   // the environment variable of the current process. The command
   // processor's environment is not changed.
   _putenv_s( "LIB", "c:\\mylib;c:\\yourlib" );

   getenv_s( &requiredSize, NULL, 0, "LIB");

   libvar = (char*) realloc(libvar, requiredSize * sizeof(char));
   if (!libvar)
   {
      printf("Failed to allocate memory!\n");
      exit(1);
   }

   // Get the new value of the LIB environment variable. 
   getenv_s( &requiredSize, libvar, requiredSize, "LIB" );

   printf( "New LIB variable is: %s\n", libvar );

   free(libvar);
}
  

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

System::Environment::GetEnvironmentVariable

См. также

Ссылки

Процесс и управление среды

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

_putenv, _wputenv

_dupenv_s, _wdupenv_s