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


getenv, _wgetenv

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

Важно!

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

Синтаксис

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 работает только в структурах данных, доступных в библиотеке времени выполнения, а не в "сегменте" среды, созданном для процесса операционной системой. Таким образом, программы, использующие аргумент main или wmain могут получать недопустимые envp сведения.

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

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

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

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

Если две копии среды (МБ CS и Юникод) существуют одновременно в программе, система времени выполнения должна mainуказывать оба копирования, что приводит к замедлению выполнения. Например, при вызове функции _putenv также автоматически производится вызов функции _wputenv, чтобы строки в двух средах совпадали.

Внимание

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

Примечание.

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

По умолчанию глобальное состояние этой функции ограничивается приложением. Чтобы изменить это поведение, см . статью "Глобальное состояние" в CRT.

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

TCHAR.H Обычной _UNICODE и _MBCS не определен _MBCS Определенные _UNICODE Определенные
_tgetenv getenv getenv _wgetenv

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

Требования

Маршрут Обязательный заголовок
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 );
}
Original LIB variable is: C:\progra~1\devstu~1\vc\lib
New LIB variable is: c:\mylib;c:\yourlib

См. также

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