_environ, _wenviron
_environ 변수는 프로세스 환경을 구성하는 멀티 바이트 문자열에 대한 포인터의 배열을 가리키는 포인터입니다. 이 전역 변수는 전역 변수 대신에 사용 될 수 있는 보안 기능이 강화된 버전의 함수인 getenv_s, _wgetenv_s 및 _putenv_s, _wputenv_s에서는 종료됩니다. _environ는 Stdlib.h에 선언되어 있습니다.
중요
이 API는 Windows 런타임에서 실행되는 응용 프로그램에서 사용할 수 없습니다.자세한 내용은 /ZW에서 지원하지 않는 CRT 함수를 참조하십시오.
extern char **_environ;
설명
main 함수를 사용하는 프로그램에서 _environ는 운영 체제 환경에서 가져온 설정에 따라 프로그램을 시작할 때 초기화 됩니다. 폼의 하나 이상의 항목으로 구성된 환경
ENVVARNAME=string
getenv_s 과 putenv_s 는 _environ 변수를 사용하여 환경 테이블에 접근 및 변경합니다. _putenv가 환경 설정을 추가하거나 삭제할 때 환경 테이블 크기는 변경 됩니다. 프로그램의 메모리 요구 사항에 따라, 메모리의 위치는 변경 될 수 있습니다. _environ의 값은 자동으로 조정 됩니다.
Stdlib.h에서 선언되는 _wenviron 변수
extern wchar_t **_wenviron;
_environ의 와이드 문자 버전입니다. wmain 함수를 사용하는 프로그램에서 _wenviron는 운영 체제 환경에서 가져온 설정에 따라 프로그램을 시작할 때 초기화 됩니다.
환경은 멀티바이트 문자열로 구성되기 때문에 main, _wenviron를 사용하는 프로그램은 초기에 NULL 값을 가집니다. _wgetenv 또는 _wputenv의 첫 호출에서, 해당 와이드 문자열 환경은 생성되고 _wenviron에 의해 가리켜집니다.
유사하게 와이드 문자열로 구성되는 (wmain) 과 _environ 를 사용하는 프로그램은 초기에 NULL값을 가집니다. _getenv 또는 _putenv의 첫 호출에서, 해당 와이드 문자열 환경은 생성되고 _environ에 의해 가리켜집니다.
환경 프로그램의 두개 복사본(MBCS와 유니코드)이 프로그램에서 동시에 존재할 때, 실행 시간을 더 늦춘 결과로서, 런타임 시스템은 두개의 복사본을 유지해야만 합니다. 예를 들어, _putenv 이 호출될 때마다, _wputenv 호출은 또한 자동으로 실행됩니다, 따라서 두개의 환경 문자열은 반응하게됩니다.
경고
런타임 시스템이 유니코드 버전 및 멀티 바이트 버전을 모두 유지 관리 하는 일부 인스턴스에서 이러한 두 환경 버전은 정확하게 대응되지 않습니다.멀티 바이트문자 문자열에 대한 고유 유니코드 문자열 매핑은 반드시 고유 하지 않기 때문에, 고유 유니코드 문자열로부터 매핑이 필요 이상으로 고유하지 않습니다.따라서 서로 다른 두 가지 유니코드 문자열은 같은 멀티 바이트 문자열에 매핑될 수 있습니다.
/MD 또는 /MDd 링크를 사용할 때 유니코드 컨텍스트에서 _environ 를 폴링하는 것은 의미가 없습니다. CRT DLL에서 프로그램 유형(와이드 또는 멀티 바이트)은 알려지지 않습니다. 가장 가능성이 높은 시나리오에서는 멀티 바이트 형식만 생성됩니다.
다음 의사 (pseudo) 코드에서는 이러한 방법을 보여 줍니다.
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 호출에서의 멀티바이트 환경 문자열을 나타냅니다. 서로 다른 두 유니코드 환경 문자열 'x' 와 'y'는 현재 MBCS에 고유하게 매핑되지 않습니다. 대신에 두 경우 모두 문자열 변환 시도의 기본 결과인 MBCS 문자'z'에 매핑됩니다.
따라서 멀티 바이트 환경에서 putenv의 암시적 호출 이후의 "env_var_z" 는 "string1"입니다. 그러나 "env_var_z"가 "string2"로 설정되어 있을 때, 이 값은 두번째 putenv의 암시적 호출에 의해 덮어씌여질 수 있습니다. 유니코드 환경 (_wenviron)과 멀티 바이트 환경(_environ)은 이어지는 일련의 호출에 의해 달라질 수 있습니다.