getenv, _wgetenv

현재 환경에서 값을 가져옵니다. 이러한 함수의 더 안전한 버전을 사용할 수 있습니다. 를 참조하세요getenv_s. _wgetenv_s

Important

이 API는 Windows 런타임에서 실행되는 애플리케이션에서 사용할 수 없습니다. 자세한 내용은 유니버설 Windows 플랫폼 앱에서 지원되지 않는 CRT 함수를 참조하세요.

구문

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 하거나 wmain 잘못된 정보를 검색할 main 수 있는 프로그램입니다.

이 경우 varname 이 함수는 NULL매개 변수 유효성 검사에 설명된 대로 잘못된 매개 변수 처리기를 호출합니다. 계속해서 실행하도록 허용한 경우 이 함수는 errnoEINVAL로 설정하고 NULL을 반환합니다.

_wgetenvgetenv의 와이드 문자 버전이고, _wgetenv의 인수와 반환 값은 와이드 문자 문자열입니다. _wenviron 전역 변수는 _environ의 와이드 문자 버전입니다.

MBCS 프로그램(예: SBCS ASCII 프로그램)에서 환경은 멀티바이트 문자열로 구성되기 때문에, _wenviron은 처음에 NULL입니다. 그런 다음 _wputenv 또는 _wgetenv의 첫 번째 호출에서 (MBCS) 환경이 이미 있는 경우 해당 와이드 문자열 환경이 만들어지고 _wenviron이 해당 환경을 가리킵니다.

마찬가지로, 유니코드(_wmain) 프로그램에서는 환경이 와이드 문자열로 구성되기 때문에 _environ은 처음에 NULL입니다. 그다음에 _putenv 또는 getenv의 첫 번째 호출에서 (유니코드) 환경이 이미 있는 경우 해당 MBCS 환경이 만들어지고 _environ에 의해 가리킵니다.

두 개의 환경 복사본(MBCS 및 유니코드)이 프로그램에 동시에 존재하는 경우 런타임 시스템은 두 복사본을 모두 획득해야 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를 사용합니다. 에 대한 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 );
}
Original LIB variable is: C:\progra~1\devstu~1\vc\lib
New LIB variable is: c:\mylib;c:\yourlib

참고 항목

프로세스 및 환경 제어
_putenv, _wputenv
환경 상수