Sdílet prostřednictvím


_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_sgetenv_sa_putenv_s , _wputenv_skteré 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í _putenvse 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