Namespaces
Variants

getenv, getenv_s

From cppreference.net
Определено в заголовочном файле <stdlib.h>
char * getenv ( const char * name ) ;
(1)
errno_t getenv_s ( size_t * restrict len, char * restrict value,
rsize_t valuesz, const char * restrict name ) ;
(2) (начиная с C11)
1) Выполняет поиск переменной окружения с именем name в списке окружения, определенном хост-системой, и возвращает указатель на строку, связанную с найденной переменной окружения. Набор переменных окружения и способы их изменения определяются реализацией.
Эта функция не обязана быть потокобезопасной. Другой вызов getenv , а также вызов POSIX-функций setenv() , unsetenv() и putenv() может сделать недействительным указатель, возвращенный предыдущим вызовом, или изменить строку, полученную из предыдущего вызова.
Изменение строки, возвращаемой функцией getenv приводит к неопределённому поведению.
2) Аналогично (1) , за исключением того, что значения переменной окружения записываются в предоставленный пользователем буфер value (если не null), а количество записанных байт сохраняется в предоставленной пользователем позиции * len (если не null). Если переменная окружения не установлена, ноль записывается в * len (если не null) и ' \0 ' записывается в value [ 0 ] (если не null). Кроме того, следующие ошибки обнаруживаются во время выполнения и вызывают установленную в данный момент функцию обработки ограничений :
  • name является нулевым указателем
  • valuesz больше RSIZE_MAX
  • value является нулевым указателем и valuesz не равен нулю
Как и все функции с проверкой границ, getenv_s гарантированно доступна только если __STDC_LIB_EXT1__ определена реализацией и если пользователь определяет __STDC_WANT_LIB_EXT1__ как целочисленную константу 1 до включения <stdlib.h> .

Содержание

Параметры

name - строка символов с нулевым окончанием, идентифицирующая имя переменной окружения для поиска
len - указатель на предоставленное пользователем место, где getenv_s сохранит длину переменной окружения
value - указатель на предоставленный пользователем массив символов, где getenv_s сохранит содержимое переменной окружения
valuesz - максимальное количество символов, которое getenv_s разрешено записать в dest (размер буфера)

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

1) строка символов, идентифицирующая значение переменной окружения, или нулевой указатель, если такая переменная не найдена.
2) ноль, если переменная окружения была найдена, не ноль, если она не была найдена или произошло нарушение ограничений времени выполнения. При любой ошибке записывает ноль в * len (если len не является нулевым указателем).

Примечания

В системах POSIX переменные окружения также доступны через глобальную переменную environ , объявленную как extern char ** environ ; в <unistd.h> , и через необязательный третий аргумент envp функции main .

Вызов getenv_s с нулевым указателем для value и нулевым значением для valuesz используется для определения размера буфера, необходимого для хранения полного результата.

Пример

#include <stdio.h>
#include <stdlib.h>
int main(void)
{
    const char *name = "PATH";
    const char *env_p = getenv(name);
    if (env_p)
        printf("Your %s is %s\n", name, env_p);
}

Возможный вывод:

Your PATH is /home/gamer/.local/bin:/usr/local/bin:/usr/bin:/bin:/usr/share/games

Ссылки

  • Стандарт C23 (ISO/IEC 9899:2024):
  • 7.22.4.6 Функция getenv (стр.: TBD)
  • K.3.6.2.1 Функция getenv_s (стр.: TBD)
  • Стандарт C17 (ISO/IEC 9899:2018):
  • 7.22.4.6 Функция getenv (стр. 256-257)
  • K.3.6.2.1 Функция getenv_s (стр. 440-441)
  • Стандарт C11 (ISO/IEC 9899:2011):
  • 7.22.4.6 Функция getenv (стр. 352-353)
  • K.3.6.2.1 Функция getenv_s (стр. 606-607)
  • Стандарт C99 (ISO/IEC 9899:1999):
  • 7.20.4.5 Функция getenv (стр: 317)
  • Стандарт C89/C90 (ISO/IEC 9899:1990):
  • 4.10.4.4 Функция getenv

Смотрите также