getenv
, _wgetenv
Získá hodnotu z aktuálního prostředí. K dispozici jsou bezpečnější verze těchto funkcí; viz getenv_s
, _wgetenv_s
.
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
char *getenv(
const char *varname
);
wchar_t *_wgetenv(
const wchar_t *varname
);
Parametry
varname
Název proměnné prostředí
Vrácená hodnota
Vrátí ukazatel na položku tabulky prostředí obsahující varname
. Není bezpečné upravit hodnotu proměnné prostředí pomocí vráceného ukazatele. _putenv
Pomocí funkce můžete upravit hodnotu proměnné prostředí. Vrácená hodnota je NULL
, pokud varname
se v tabulce prostředí nenajde.
Poznámky
Funkce getenv
vyhledá seznam proměnných varname
prostředí . getenv
nerozlišuje velká a malá písmena v operačním systému Windows. getenv
a _putenv
použijte kopii prostředí, na kterou odkazuje globální proměnná _environ
pro přístup k prostředí. getenv
funguje pouze u datových struktur, které jsou přístupné pro knihovnu za běhu, a ne v prostředí "segmentu" vytvořeném pro proces operačním systémem. Programy, které používají envp
argument nebo main
wmain
mohou načíst neplatné informace.
Pokud varname
ano NULL
, tato funkce vyvolá neplatnou obslužnou rutinu parametru, jak je popsáno v ověření parametru. Pokud je spuštění povoleno pokračovat, tato funkce nastaví errno
EINVAL
a vrátí NULL
.
_wgetenv
je verze širokého znaku getenv
; argument a návratová _wgetenv
hodnota jsou řetězce širokých znaků. Globální _wenviron
proměnná je širokoznační verze _environ
.
V programu MBCS (například v programu SBCS ASCII) _wenviron
je zpočátku NULL
, protože prostředí se skládá z vícebajtových řetězců znaků. Pak se při prvním volání nebo _wputenv
při prvním volání _wgetenv
, pokud již existuje prostředí (MBCS), vytvoří se odpovídající prostředí řetězce širokého znaku a pak bude odkazovat na _wenviron
.
Podobně v programu Unicode (_wmain
) je zpočátkuNULL
, _environ
protože prostředí se skládá z řetězců širokých znaků. Pak se při prvním volání nebo _putenv
při prvním volání getenv
, pokud již existuje prostředí (Unicode), vytvoří se odpovídající prostředí MBCS a pak 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é. Další informace naleznete v tématu _environ
, _wenviron
.
Poznámka:
Funkce _putenv
a _getenv
jejich rodiny nejsou bezpečné pro přístup z více vláken. _getenv
může vrátit ukazatel řetězce při _putenv
úpravě řetězce, což způsobuje náhodná selhání. Ujistěte se, že jsou volání těchto funkcí synchronizovaná.
Ve výchozím nastavení je globální stav této funkce vymezen na aplikaci. Chcete-li toto chování změnit, přečtěte si téma Globální stav v CRT.
Mapování rutin obecného textu
TCHAR.H rutina |
_UNICODE a _MBCS není definován |
_MBCS definovaný |
_UNICODE definovaný |
---|---|---|---|
_tgetenv |
getenv |
getenv |
_wgetenv |
Pokud chcete zkontrolovat nebo změnit hodnotu TZ
proměnné prostředí, použijte getenv
_putenv
a _tzset
podle potřeby. Další informaceochch TZ
_tzset
_daylight
timezone
_tzname
Požadavky
Rutina | Požadovaný hlavičkový soubor |
---|---|
getenv |
<stdlib.h> |
_wgetenv |
<stdlib.h> nebo <wchar.h> |
Další informace o kompatibilitě najdete v tématu Kompatibilita.
Příklad
// crt_getenv.c
// compile with: /W3
// This program uses getenv to retrieve
// the LIB environment variable and then uses
// _putenv to change it to a new value.
#include <stdlib.h>
#include <stdio.h>
int main( void )
{
char *libvar;
// Get the value of the LIB environment variable.
libvar = getenv( "LIB" ); // C4996
// Note: getenv is deprecated; consider using getenv_s instead
if( libvar != NULL )
printf( "Original LIB variable is: %s\n", libvar );
// Attempt to change path. Note that this only affects the environment
// variable of the current process. The command processor's
// environment is not changed.
_putenv( "LIB=c:\\mylib;c:\\yourlib" ); // C4996
// Note: _putenv is deprecated; consider using putenv_s instead
// Get new value.
libvar = getenv( "LIB" ); // C4996
if( libvar != NULL )
printf( "New LIB variable is: %s\n", libvar );
}
Original LIB variable is: C:\progra~1\devstu~1\vc\lib
New LIB variable is: c:\mylib;c:\yourlib
Viz také
Řízení procesů a prostředí
_putenv
, _wputenv
Konstanty prostředí