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


getenv, _wgetenv

Получает значение из текущей среды. Существуют более безопасные версии этих функций; см. раздел getenv_s, _wgetenv_s.

Важно!

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

char *getenv( 
   const char *varname 
);
wchar_t *_wgetenv( 
   const wchar_t *varname 
);

Параметры

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

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

Возвращает указатель на запись таблицы среды, содержащий varname. Изменять значение переменной среды с помощью возвращенного указателя небезопасно. Используйте функцию _putenv, чтобы изменять значение переменной среды. Возвращаемое значение NULL, если varname не найдено в таблице среды.

Заметки

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

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

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

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

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

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

Предупреждение

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

Примечание

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

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

Подпрограмма TCHAR.H

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

_MBCS определено

_UNICODE определено

_tgetenv

getenv

getenv

_wgetenv

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

Требования

Подпрограмма

Обязательный заголовок

getenv

<stdlib.h>

_wgetenv

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

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

Пример

// crt_getenv.c
// compile with: /W3
// This program uses getenv 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;

   // Get the value of the LIB environment variable.
   libvar = getenv( "LIB" ); // C4996
   // Note: getenv is deprecated; consider using getenv_s instead

   if( libvar != NULL )
      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( "LIB=c:\\mylib;c:\\yourlib" ); // C4996
   // Note: _putenv is deprecated; consider using putenv_s instead

   // Get new value.
   libvar = getenv( "LIB" ); // C4996

   if( libvar != NULL )
      printf( "New LIB variable is: %s\n", libvar );
}
  

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

System::Environment::GetEnvironmentVariable

См. также

Ссылки

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

_putenv, _wputenv

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