_environ, _wenviron
_environ Zmienna jest wskaźnik do tablicy do łańcuchów znaków wielobajtowych, które stanowią środowisko procesu.Ta zmienna globalna jest przestarzała dla bezpieczniejszego funkcjonalne wersje getenv_s, _wgetenv_s i _putenv_s, _wputenv_s, które powinny być stosowane zamiast zmiennej globalnej._environjest zadeklarowany w plik Stdlib.h.
Ważne |
---|
Ten interfejs API nie można używać w aplikacji, których wykonywanie w czasie wykonywania systemu Windows.Aby uzyskać więcej informacji, zobacz CRT funkcje nie obsługiwane przez /ZW. |
extern char **_environ;
Uwagi
W programie, który korzysta z main funkcji, _environ jest inicjowany w momencie uruchamiania programu zgodnie z ustawieniami podjęte ze środowiska systemu operacyjnego.Środowiska składa się z jednego lub więcej wpisów formularza
ENVVARNAME=string
getenv_si putenv_s używać _environ zmiennej do dostępu i modyfikowania tabeli środowiska.Gdy _putenv jest wywoływana w celu dodawania i usuwania ustawień środowiska rozmiar zmienia się w tabeli środowiska.Jego lokalizacji w pamięci może ulec zmianie w zależności od wymagań pamięci tego programu.Wartość _environ automatycznie jest odpowiednio dopasowywana.
_wenviron Zadeklarowana zmienna, w plik Stdlib.h jako:
extern wchar_t **_wenviron;
jest ona szerokich znaków do _environ.W programie, który korzysta z wmain funkcji, _wenviron jest inicjowany w momencie uruchamiania programu zgodnie z ustawieniami podjęte ze środowiska systemu operacyjnego.
W programie, który korzysta z main, _wenviron jest początkowo NULL ponieważ środowiska składa się z ciągów znaków wielobajtowych.Na pierwsze wezwanie do _wgetenv lub _wputenv, odpowiedniego środowiska dla łańcucha szerokich znaków jest tworzony i jest wskazywana przez _wenviron.
Podobnie, w programie, który korzysta z wmain, _environ jest początkowo NULL ponieważ środowiska składa się z ciągów szerokich znaków.Na pierwsze wezwanie do _getenv lub _putenv, odpowiednie środowisko łańcuch znaków jest tworzony i jest wskazywana przez _environ.
W przypadku dwie kopie środowiska (MBCS Unicode) istnieją jednocześnie w programie, działającego systemu musi usunąć obie kopie, skutkujące wolniejszy czas wykonania.Na przykład, gdy wywołujemy _putenv, wywołanie _wputenv jest również wykonywane automatycznie, tak aby odpowiadały ciągów środowiskowych dwa.
Przestroga |
---|
W rzadkich przypadkach gdy system wykonawczy jest utrzymanie zarówno wersję Unicode, jak i wielobajtowych wersją środowiska naturalnego, te wersje dwóch środowiska mogą nie odpowiadać dokładnie.Dlatego, chociaż dowolny unikatowy ciąg znaków wielobajtowych mapowany na unikatowy ciąg Unicode, mapowanie unikatowy ciąg Unicode na ciąg znaków wielobajtowych nie jest koniecznie unikatowy.W związku z tym dwa odrębne ciągi Unicode mogą być mapowane na ten sam ciąg wielobajtowy. |
Sondowanie _environ w Unicode kontekstu jest bez znaczenia, gdy Opcje lub /MDd powiązania jest używany.Dla biblioteki DLL CRT rodzaj (szeroki lub wielobajtowych) program jest nieznany.Tylko wielobajtowych typ jest tworzony, ponieważ jest to najbardziej prawdopodobnym scenariuszem.
Pseudo-code następujące ilustruje, jak jest to możliwe.
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")
W notacji używanych na przykład ciągi znaków nie są literały ciągów znaków C; Przeciwnie, są one symbole zastępcze, które reprezentują literały ciągów znaków środowiska Unicode w _wputenv środowiska wywołanie i wielobajtowe ciągi w putenv zadzwonić.Zastępcze znakux"i"y"w dwóch odrębnych Unicode ciągów tekstowych środowiska nie są mapowane jednoznacznie na znaki w bieżącym MBCS.Zamiast tego, mapować zarówno niektórych znaków MBCS "z" oznacza to wynik domyślny próba konwersji ciągów znaków.
W ten sposób, w środowisku wielobajtowych, wartość "env_var_z" po pierwszym wywołaniu niejawna putenv byłoby "string1", ale wartość ta będzie je zastąpić na drugim niejawna wywołanie putenv, gdy wartość "env_var_z"jest równa"string2".Środowisko Unicode (w _wenviron) i wielobajtowych środowiska naturalnego (w _environ) dlatego będzie się różnić po tej serii wywołań.