_environ
, _wenviron
Proměnná _environ
je ukazatel na pole ukazatelů na řetězce s vícebajtovými znaky, které tvoří procesní prostředí. Tato globální proměnná byla zastaralá pro bezpečnější funkční verze _wgetenv_s
getenv_s
a_putenv_s
, _wputenv_s
které by se měly používat místo globální proměnné. _environ
je deklarován v stdlib.h.
Důležité
Toto rozhraní API nelze použít v aplikacích, které se spouští v prostředí Windows Runtime. Další informace najdete v tématu Funkce CRT, které nejsou v aplikacích Univerzální platforma Windows podporované.
Syntaxe
extern char **_environ;
Poznámky
V programu, který tuto funkci používá main
, _environ
se inicializuje při spuštění programu podle nastavení převzatého z prostředí operačního systému. Prostředí se skládá z jedné nebo více položek formuláře.
ENVVARNAME
=string
getenv_s
a putenv_s
proměnnou _environ
použijte pro přístup k tabulce prostředí a úpravě této tabulky. Při _putenv
zavolání pro přidání nebo odstranění nastavení prostředí se změní velikost tabulky prostředí. Jeho umístění v paměti se může také změnit v závislosti na požadavcích programu na paměť. Hodnota _environ
se automaticky upraví odpovídajícím způsobem.
Proměnná _wenviron
deklarovaná v stdlib.h jako:
extern wchar_t **_wenviron;
je širokoznační verze ._environ
V programu, který tuto funkci používá wmain
, _wenviron
se inicializuje při spuštění programu podle nastavení převzatého z prostředí operačního systému.
V programu, který používá main
, _wenviron
je zpočátku NULL
, protože prostředí se skládá z vícebajtových řetězců znaků. Při prvním volání _wgetenv
nebo _wputenv
, odpovídající široké-znakové řetězcové prostředí je vytvořen a je odkazován na _wenviron
.
Podobně v programu, který používá wmain
, _environ
je zpočátku NULL
, protože prostředí se skládá z řetězců širokých znaků. Při prvním volání _getenv
nebo _putenv
, odpovídající vícebajtové řetězcové prostředí je vytvořeno a odkazuje na _environ
.
Pokud v programu existují současně dvě kopie prostředí (MBCS a Unicode), musí systém za běhu udržovat obě kopie, což vede k pomalejší době provádění. Například při každém volání _putenv
se volání _wputenv
spustí automaticky, aby dva řetězce prostředí odpovídaly.
Upozornění
Ve výjimečných případech nemusí tyto dvě verze prostředí přesně odpovídat, když systém za běhu udržuje verzi Unicode i vícebajtovou verzi prostředí. Důvodem je to, že i když se jakýkoli jedinečný řetězec s vícebajtovými znaky mapuje na jedinečný řetězec Unicode, mapování z jedinečného řetězce Unicode na řetězec s vícebajtovými znaky nemusí být nutně jedinečné. Proto se dva odlišné řetězce Unicode můžou mapovat na stejný vícebajtový řetězec.
Dotazování _environ
v kontextu Unicode je bez významu při použití /MD nebo /MDd
propojení. Pro knihovnu CRT DLL je typ (široký nebo vícebajtový) programu neznámý. Vytvoří se pouze vícebajtový typ, protože se jedná o nejpravděpodobnější scénář.
Následující pseudokód znázorňuje, jak se toto vytvoření může stát.
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")
V zápisu použitém v tomto příkladu řetězce znaků nejsou řetězcové literály jazyka C; Jsou to zástupné symboly, které představují literály řetězce prostředí Unicode ve _wputenv
volání a vícebajtových řetězcích prostředí ve putenv
volání. Zástupné symboly znaků "x
' a 'y
' ve dvou různých řetězcích prostředí Unicode se nemapují jedinečně na znaky v aktuální službě MBCS. Místo toho se oba mapují na určitý znak MBCS 'z
', což je výchozí výsledek pokusu o převod řetězců.
Ve vícebajtovém prostředí by tedy hodnota "env_var_z
" po prvním implicitním volání putenv
byla "string1
", ale tato hodnota by byla přepsána při druhém implicitním volání putenv
, pokud je hodnota "env_var_z
" nastavena na "string2
". Prostředí Unicode (v _wenviron
) a vícebajtové prostředí (v _environ
) by se proto po této řadě volání lišit.
Viz také
Globální proměnné
getenv
, _wgetenv
getenv_s
, _wgetenv_s
_putenv
, _wputenv
_putenv_s
, _wputenv_s