_environ
, _wenviron
Zmienna _environ
jest wskaźnikiem do tablicy wskaźników do ciągów wielobajtowych znaków, które stanowią środowisko procesu. Ta zmienna globalna została uznana za przestarzałą dla bezpieczniejszych wersji funkcjonalnych getenv_s
i _putenv_s
_wgetenv_s
, _wputenv_s
które powinny być używane zamiast zmiennej globalnej. _environ
jest zadeklarowany w pliku Stdlib.h.
Ważne
Tego interfejsu API nie można używać w aplikacjach wykonywanych w środowisko wykonawcze systemu Windows. Aby uzyskać więcej informacji, zobacz Funkcje CRT nieobsługiwane w aplikacjach platforma uniwersalna systemu Windows.
Składnia
extern char **_environ;
Uwagi
W programie, który używa main
funkcji, _environ
jest inicjowany podczas uruchamiania programu zgodnie z ustawieniami pobranymi ze środowiska systemu operacyjnego. Środowisko składa się z co najmniej jednego wpisu formularza
ENVVARNAME
=string
getenv_s
i putenv_s
użyj zmiennej _environ
, aby uzyskać dostęp do tabeli środowiska i zmodyfikować ją. Po _putenv
wywołaniu polecenia w celu dodania lub usunięcia ustawień środowiska tabela środowisk zmienia rozmiar. Jego lokalizacja w pamięci może również ulec zmianie, w zależności od wymagań dotyczących pamięci programu. Wartość parametru _environ
jest odpowiednio dostosowana.
Zmienna _wenviron
zadeklarowana w pliku Stdlib.h jako:
extern wchar_t **_wenviron;
jest wersją o szerokim znaku ._environ
W programie, który używa wmain
funkcji, _wenviron
jest inicjowany podczas uruchamiania programu zgodnie z ustawieniami pobranymi ze środowiska systemu operacyjnego.
W programie, który używa main
metody , _wenviron
jest początkowo NULL
ze względu na to, że środowisko składa się z ciągów wielobajtowych znaków. Na pierwszym wywołaniu metody _wgetenv
lub _wputenv
jest tworzone odpowiednie środowisko ciągów o szerokim znaku i jest wskazywane przez _wenviron
.
Podobnie w programie, który używa wmain
metody , _environ
jest początkowo NULL
ze względu na to, że środowisko składa się z ciągów o szerokim znaku. Na pierwszym wywołaniu metody _getenv
lub _putenv
jest tworzone odpowiednie środowisko ciągów wielobajtowych znaków i jest wskazywane przez _environ
.
Gdy dwie kopie środowiska (MBCS i Unicode) istnieją jednocześnie w programie, system czasu wykonywania musi obsługiwać obie kopie, co powoduje wolniejszy czas wykonywania. Na przykład za każdym razem, gdy wywołasz _putenv
metodę , wywołanie _wputenv
metody jest również wykonywane automatycznie, tak aby dwa ciągi środowiska odpowiadały.
Uwaga
W rzadkich przypadkach, gdy system czasu wykonywania utrzymuje zarówno wersję Unicode, jak i wielobajtową wersję środowiska, te dwie wersje środowiska mogą nie odpowiadać dokładnie. Dzieje się tak dlatego, że każdy unikatowy ciąg wielobajtowy mapuje na unikatowy ciąg Unicode, mapowanie z unikatowego ciągu Unicode na ciąg wielobajtowy nie musi być unikatowe. W związku z tym dwa odrębne ciągi Unicode mogą być mapowanie na ten sam ciąg wielobajtowy.
Sondowanie _environ
w kontekście Unicode jest bez znaczenia, gdy /MD lub /MDd
linkage jest używany. W przypadku biblioteki DLL CRT typ (szeroki lub wielobajtowy) programu jest nieznany. Tworzony jest tylko typ wielobajtowy, ponieważ jest to najbardziej prawdopodobny scenariusz.
Poniższy pseudo-kod ilustruje, jak może się to zdarzyć.
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żywanej w tym przykładzie ciągi znaków nie są literałami ciągu języka C; zamiast tego są symbolami zastępczymi reprezentującymi literały ciągu środowiska Unicode w _wputenv
wywołaniu i ciągami środowisk wielobajtowymi w wywołaniu putenv
. Symbole zastępcze znaków "x
" i "y
" w dwóch odrębnych ciągach środowiska Unicode nie są mapowane unikatowo na znaki w bieżącym MBCS. Zamiast tego oba mapuj na jakiś znak MBCS "z
", który jest domyślnym wynikiem próby przekonwertowania ciągów.
W związku z tym w środowisku wielobajtowym wartość "env_var_z
" po pierwszym niejawnym wywołaniu putenv
będzie "string1
", ale ta wartość zostanie zastąpiona w drugim niejawnym wywołaniu metody putenv
, gdy wartość "" jest ustawiona na "string2
env_var_z
". Środowisko Unicode (w systemie _wenviron
) i środowisko wielobajtowe (w systemie _environ
) różniłoby się w związku z tym po tej serii wywołań.
Zobacz też
Zmienne globalne
getenv
, _wgetenv
getenv_s
, _wgetenv_s
_putenv
, _wputenv
_putenv_s
, _wputenv_s