Share via


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 varnameprostř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 mainwmain 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í errnoEINVAL 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 _wputenvpř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 _putenvpř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í mainsystém runtime obsahovat 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 mainza běhu používá 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 Rutinní _UNICODE a _MBCS není definován _MBCS Definovány _UNICODE Definovány
_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_daylighttimezone_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í