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