_environ _wenviron
_environ Proměnné je ukazatel na pole ukazatelů pro vícebajtové znakové řetězce, které představují prostředí procesu.Tuto globální proměnnou se již nepoužívá pro bezpečnější funkční verze getenv_s _wgetenv_s a _putenv_s _wputenv_s, který má být použit namísto globální proměnné._environje deklarováno v Stdlib.h.
Důležité |
---|
Toto rozhraní API nelze použít v aplikacích, které jsou spuštěny v systému Windows Runtime.Další informace naleznete v tématu CRT funkce nejsou podporovány s /ZW. |
extern char **_environ;
Poznámky
V programu, který používá main funkce, _environ inicializovat při spuštění programu podle nastavení 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_sa putenv_s použít _environ proměnné pro přístup a úpravy tabulky prostředí.Při _putenv je volána pro přidání nebo odstranění nastavení prostředí tabulky prostředí změní velikost.Jeho umístění v paměti může také měnit v závislosti na požadavky na paměť programu.Hodnota _environ je automaticky upraveno.
_wenviron Proměnné deklarované v Stdlib.h jako:
extern wchar_t **_wenviron;
je verzí širokého znaku _environ.V programu, který používá wmain funkce, _wenviron inicializovat při spuštění programu podle nastavení z prostředí operačního systému.
V programu, který používá main, _wenviron je původně NULL protože prostředí je tvořeno vícebajtové znakové řetězce.Při prvním volání _wgetenv nebo _wputenv, odpovídající prostředí-široký znak je vytvořena a je odkazuje _wenviron.
Podobně v programu, který používá wmain, _environ je původně NULL protože prostředí se skládá z řetězce širokého znaku.Při prvním volání _getenv nebo _putenv, odpovídající prostředí vícebajtové znakové řetězce, je vytvořena a je odkazuje _environ.
Pokud dvě kopie prostředí (znaková sada MBCS a Unicode) současně v programu, běhu systému musí udržovat obě kopie za následek pomalejší doba spuštění.Například při každém volání _putenv, volání _wputenv se rovněž provádí automaticky, tak, že odpovídají prostředí dva řetězce.
Upozornění |
---|
Ve výjimečných případech při běhu systému udržuje verze Unicode a vícebajtovou verzí prostředí, tyto dvě prostředí verze nemusí odpovídat přesně.To je protože, ačkoli všechny jedinečné vícebajtové znakové řetězce mapuje jedinečný řetězec znaků Unicode, mapování jedinečný řetězec znaků Unicode řetězec vícebajtových znaků není nutně jedinečný.Proto dvě odlišné řetězce Unicode mohou být mapovány na stejný vícebajtovém řetězeci. |
Dotazování _environ v Unicode kontextu je náročné, když /MD nebo /MDd slouží k navázání.Pro knihovnu DLL CRT Neznámý typ (široký nebo vícebajtové) program.Pouze typ vícebajtové je vytvořen, protože to je nejpravděpodobnější scénář.
Následujícím pseudo-kódu ukazuje, jak tato situace může nastat.
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")
Zápis použitý v tomto příkladu znakové řetězce nejsou v řetězcové literály C; Namísto toho jsou zástupné symboly, které představují Unicode prostředí řetězcové literály v _wputenv prostředí volání a vícebajtové řetězce v putenv volání.Zástupný znak textx"a"y"ve dvou odlišných Unicode řetězců prostředí nemapují jednoznačně znaků v aktuální znakové sady MBCS.Místo toho jak namapovat na některé znaky znakové sady MBCS 'z' to znamená výchozí výsledek pokus o převedení řetězce.
Tedy v vícebajtové prostředí na hodnotu "env_var_z" po prvním implicitní volání putenv by "string1", ale tato hodnota by přepsat na druhé implicitní volání putenv, když hodnota "env_var_z"nastavena na"string2".Prostředí Unicode (v _wenviron) a vícebajtové prostředí (v _environ) by proto lišit od této série volání.