_environ, _wenviron_environ, _wenviron

_environ 변수는 프로세스 환경을 구성하는 멀티바이트 문자열에 대한 포인터 배열의 포인터입니다.The _environ variable is a pointer to an array of pointers to the multibyte-character strings that constitute the process environment. 이 전역 변수는 전역 변수 대신 사용되어야 할 보안 기능이 보다 강화된 버전인 getenv_s, _wgetenv_s_putenv_s, _wputenv_s에 대해서는 더 이상 사용되지 않습니다.This global variable has been deprecated for the more secure functional versions getenv_s, _wgetenv_s and _putenv_s, _wputenv_s, which should be used in place of the global variable. _environ은 Stdlib.h에서 선언됩니다._environ is declared in Stdlib.h.

중요

이 API는 Windows 런타임에서 실행되는 응용 프로그램에서 사용할 수 없습니다.This API cannot be used in applications that execute in the Windows Runtime. 자세한 내용은 /ZW에서 지원하지 않는 CRT 함수를 참조하세요.For more information, see CRT functions not supported with /ZW.

구문Syntax

extern char **_environ;  

설명Remarks

main 함수를 사용하는 프로그램에서 _environ은 프로그램 시작 시 운영 체제 환경에서 가져온 설정에 따라 초기화됩니다.In a program that uses the main function, _environ is initialized at program startup according to settings taken from the operating-system environment. 환경은 폼의 하나 이상의 항목으로 구성됩니다.The environment consists of one or more entries of the form

ENVVARNAME =stringENVVARNAME =string

getenv_sputenv_s_environ 변수를 사용하여 환경 테이블에 액세스하고 테이블을 수정합니다.getenv_s and putenv_s use the _environ variable to access and modify the environment table. 환경 설정을 추가하거나 삭제하기 위해 _putenv가 호출되면 환경 테이블 크기가 변경됩니다.When _putenv is called to add or delete environment settings, the environment table changes size. 프로그램의 메모리 요구 사항에 따라, 테이블의 메모리 내 위치도 변경될 수 있습니다.Its location in memory may also change, depending on the program's memory requirements. 이에 따라 _environ의 값이 자동으로 조정됩니다.The value of _environ is automatically adjusted accordingly.

Stdlib.h에서 다음과 같이 선언되는 _wenviron 변수는The _wenviron variable, declared in Stdlib.h as:

extern wchar_t **_wenviron;  

와이드 문자 버전의 _environ입니다.is a wide-character version of _environ. wmain 함수를 사용하는 프로그램에서 _wenviron은 프로그램 시작 시 운영 체제 환경에서 가져온 설정에 따라 초기화됩니다.In a program that uses the wmain function, _wenviron is initialized at program startup according to settings taken from the operating-system environment.

환경이 멀티바이트 문자열로 구성되기 때문에, main을 사용하는 프로그램에서 _wenviron은 처음에 NULL입니다.In a program that uses main, _wenviron is initially NULL because the environment is composed of multibyte-character strings. _wgetenv 또는 _wputenv에 대한 첫 번째 호출에서 해당하는 와이드 문자열 환경이 만들어지며 _wenviron이 이 환경을 가리킵니다.On the first call to _wgetenv or _wputenv, a corresponding wide-character string environment is created and is pointed to by _wenviron.

마찬가지로, wmain을 사용하는 프로그램에서 환경이 와이드 문자열로 구성되기 때문에 _environ은 처음에 NULL입니다.Similarly, in a program that uses wmain, _environ is initially NULL because the environment is composed of wide-character strings. _getenv 또는 _putenv에 대한 첫 번째 호출에서 해당하는 멀티바이트 문자열 환경이 만들어지며 _environ이 이 환경을 가리킵니다.On the first call to _getenv or _putenv, a corresponding multibyte-character string environment is created and is pointed to by _environ.

환경의 두 개의 복사본(MBCS 및 유니코드)이 프로그램에 동시에 존재하는 경우 런타임 시스템은 두 복사본을 모두 유지해야 하며 이에 따라 실행 시간이 늦어집니다.When two copies of the environment (MBCS and Unicode) exist simultaneously in a program, the run-time system must maintain both copies, resulting in slower execution time. 예를 들어 _putenv를 호출할 때마다 _wputenv에 대한 호출도 자동으로 실행되어 두 환경 문자열이 일치하게 됩니다.For example, whenever you call _putenv, a call to _wputenv is also executed automatically, so that the two environment strings correspond.

주의

드문 경우지만, 런타임 시스템이 유니코드 버전과 멀티바이트 버전의 환경을 모두 유지할 때 두 환경 버전이 정확히 일치하지 않을 수도 있습니다.In rare instances, when the run-time system is maintaining both a Unicode version and a multibyte version of the environment, these two environment versions might not correspond exactly. 이는 고유한 멀티바이트 문자열이 고유한 유지코드 문자열에 매핑되지만 고유 유니코드 문자열에서 멀티바이트 문자열로 매핑이 반드시 고유하지는 않기 때문입니다.This is because, although any unique multibyte-character string maps to a unique Unicode string, the mapping from a unique Unicode string to a multibyte-character string is not necessarily unique. 따라서 두 개의 고유한 유니코드 문자열이 동일한 멀티바이트 문자열에 매핑될 수 있습니다.Therefore, two distinct Unicode strings might map to the same multibyte string.

/MD 또는 /MDd 링크가 사용될 때는 유니코드 컨텍스트에서 _environ을 폴링하는 것이 의미가 없습니다.Polling _environ in a Unicode context is meaningless when /MD or /MDd linkage is used. CRT DLL에의 경우, 프로그램의 (와이드 또는 멀티바이트) 형식을 알 수 없습니다.For the CRT DLL, the type (wide or multibyte) of the program is unknown. 멀티바이트 형식이 가장 가능성이 높은 시나리오이기 때문에 이 형식만 생성됩니다.Only the multibyte type is created because that is the most likely scenario.

다음 의사 코드에서는 이런 작업이 발생할 수 있는 방법을 보여 줍니다.The following pseudo-code illustrates how this can happen.

int i, j;  
i = _wputenv( "env_var_x=string1" );  // results in the implicit call:  
                                      // putenv ("env_var_z=string1")  
j = _wputenv( "env_var_y=string2" );  // also results in implicit call:  
                                      // putenv("env_var_z=string2")  

이 예제에서 사용된 표기법에서 문자열은 C 문자열 리터럴이 아니라 _wputenv 호출에서는 유니코드 환경 문자열 리터럴을 나타내는 자리 표시자이고 putenv 호출에서는 멀티바이트 환경 문자열입니다.In the notation used for this example, the character strings are not C string literals; rather, they are placeholders that represent Unicode environment string literals in the _wputenv call and multibyte environment strings in the putenv call. 두 개의 고유 유니코드 환경 문자열에서 문자 자리 표시자 'x' 및 'y'는 현재 MBCS의 문자에 고유하게 매핑되지 않습니다.The character placeholders 'x' and 'y' in the two distinct Unicode environment strings do not map uniquely to characters in the current MBCS. 대신, 두 자리 표시자 모두 문자열 변환 시의 기본 결과인 일부 MBCS 문자 'z'에 매핑됩니다.Instead, both map to some MBCS character 'z' that is the default result of the attempt to convert the strings.

따라서 멀티바이트 환경에서 putenv에 대한 첫 번째 암시적 호출 이후에 "env_var_z"의 값은 "string1"이지만, 이 값은 putenv에 대한 두 번째 암시적 호출 발생 시 덮어써집니다("env_var_z"의 값이 "string2"로 설정된 경우).Thus, in the multibyte environment, the value of "env_var_z" after the first implicit call to putenv would be "string1", but this value would be overwritten on the second implicit call to putenv, when the value of "env_var_z" is set to "string2". 따라서, 이 호출 계열 이후에 유니코드 환경(_wenviron에서)과 멀티바이트 환경(_environ에서)이 달라집니다.The Unicode environment (in _wenviron) and the multibyte environment (in _environ) would therefore differ following this series of calls.

참고 항목See Also

전역 변수 Global Variables
getenv, _wgetenv getenv, _wgetenv
getenv_s, _wgetenv_s getenv_s, _wgetenv_s
_putenv, _wputenv _putenv, _wputenv
_putenv_s, _wputenv_s_putenv_s, _wputenv_s