Share via


getenv_s, _wgetenv_s

현재 환경에서 값을 가져옵니다.이러한 버전의 getenv, _wgetenv 에 설명 된 대로 보안을 강화 하 고 있는 CRT의 보안 기능.

중요중요

이 API를 실행 하는 응용 프로그램에서 사용할 수 있는 Windows 런타임.자세한 내용은 /zw에 지원 되는 CRT 함수.

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
    Size of buffer.

  • varname
    환경 변수 이름입니다.

반환 값

성공 하는 경우에 0입니다. 그렇지 않으면, 오류 코드 실패 시.

오류 조건

pReturnValue

buffer

numberOfElements

varname

반환 값

NULL

any

any

any

EINVAL

any

NULL

>0

any

EINVAL

any

any

any

NULL

EINVAL

이러한 오류 조건이 호출에 잘못 된 매개 변수 처리기에 설명 된 대로 매개 변수 유효성 검사.실행을 계속 허용 되 면 기능 설정 errno 에 EINVAL 및 반환 EINVAL.

버퍼가 너무 작습니다 경우 이러한 함수를 반환 하는 또한 ERANGE.에 잘못 된 매개 변수 처리기는 호출 되지 않습니다.필요한 버퍼 크기를 작성 pReturnValue, 하 고 있으므로 큰 버퍼를 사용 하 여 다시 함수를 호출 하는 프로그램을 사용 합니다.

설명

getenv_s 함수에 대 한 환경 변수의 목록 검색 varname.getenv_sWindows 운영 체제에서 대 / 소문자입니다.getenv_s및 _putenv_s 전역 변수를 통해 가리키는 환경의 복사본을 사용 _environ 환경에 액세스할 수 있습니다.getenv_s에 런타임 라이브러리에 액세스할 수 있는 데이터 구조 및 프로세스에 대 한 운영 체제에서 만든 "세그먼트" 환경에서 작동 합니다.따라서 사용 하는 프로그램은 envp 인수를 또는 wmain 잘못 된 정보를 검색할 수 있습니다.

_wgetenv_s와이드 문자 버전인 getenv_s. 인수와 반환 값을 _wgetenv_s 와이드 문자 문자열입니다._wenviron 전역 변수인 와이드 문자 버전을 _environ.

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

유니코드에서는 비슷하게 (_wmain) 프로그램을 _environ 처음에 NULL 와이드 문자열 환경이 구성 되므로.다음에 첫 번째 호출에 _putenv, 또는에 대 한 첫 번째 호출에 getenv_s (유니코드) 환경이 이미 있는 경우 해당 MBCS 환경이 만들어지고 다음 가리킵니다 _environ.

프로그램의 환경 (MBCS와 유니코드)의 복사본 두 개를 동시에 존재할 때 런타임 시스템 두 복사본을 유지 해야 하 고 그러면 느린 실행 시간.호출할 때 예를 들어, _putenv, 호출을 _wputenv 두 환경 문자열에 대응 되도록 자동으로 실행 될 수도 있습니다.

주의 정보주의

런타임 시스템 유니코드 버전 및 환경에서의 멀티 버전을 모두 유지 관리 하는 경우 드물긴 하지만 두 환경 버전 정확 하 게 다를 수 있습니다.이 고유 유니코드 문자열을 고유한 멀티 바이트 문자 문자열을 매핑하는 있지만 고유 유니코드 문자열을 멀티 바이트 문자 문자열 매핑을 반드시 고유 하지 때문에 발생 합니다.자세한 내용은 _environ, _wenviron을 참조하십시오.

[!참고]

_putenv_s_getenv_s 제품군의 함수는 스레드로부터 안전 합니다._getenv_s하는 동안 문자열 포인터를 반환할 수 있습니다 _putenv_s 문자열을 수정 하 고 있으므로 임의의 오류를 일으킬 합니다.이러한 함수 호출을 동기화 해야 합니다.

C + +에서이 함수 템플릿 오버 로드에 의해 단순화 됩니다. 오버 로드 버퍼 길이 자동으로 유추 하 고 있으므로 size 인수를 지정할 필요가 있습니다.자세한 내용은 보안 템플릿 오버 로드을 참조하십시오.

일반 텍스트 루틴 매핑

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

참고 항목

참조

프로세스 및 환경 제어

환경 상수

_putenv, _wputenv

_dupenv_s, _wdupenv_s