Sdílet prostřednictvím


getenv_s _wgetenv_s

Získá hodnotu z aktuálního prostředí.Tyto verze GETENV _wgetenv mají vylepšení zabezpečení, jak je popsáno v Funkce zabezpečení v CRT.

Důležitá poznámkaDůležité

Toto rozhraní API nelze použít v aplikacích, které jsou spuštěny v Windows Runtime.Další informace naleznete v tématu CRT funkce nejsou podporovány s /ZW.

errno_t getenv_s( 
   size_t *pReturnValue,
   char* buffer,
   size_t numberOfElements,
   const char *varname 
);
errno_t _wgetenv_s( 
   size_t *pReturnValue,
   wchar_t *buffer,
   size_t numberOfElements,
   const wchar_t *varname 
);
template <size_t size>
errno_t getenv_s( 
   size_t *pReturnValue,
   char (&buffer)[size],
   const char *varname 
); // C++ only
template <size_t size>
errno_t _wgetenv_s( 
   size_t *pReturnValue,
   wchar_t (&buffer)[size],
   const wchar_t *varname 
); // C++ only

Parametry

  • pReturnValue
    Velikost vyrovnávací paměti, který je požadovaný nebo 0, pokud proměnná nebyla nalezena.

  • buffer
    Chcete-li vyrovnávací paměť pro ukládání hodnot proměnné prostředí.

  • numberOfElements
    Size of buffer.

  • varname
    Název proměnné prostředí.

Vrácená hodnota

Nula v případě úspěchu; v opačném případě chybu kód při selhání.

Chybové stavy

pReturnValue

buffer

numberOfElements

varname

Vrácená hodnota

NULL

všechny

všechny

všechny

EINVAL

všechny

NULL

> 0

všechny

EINVAL

všechny

všechny

všechny

NULL

EINVAL

Některé z těchto chybových podmínek vyvolá obslužnou rutinu neplatný parametr, jak je popsáno v Ověření parametrů.Je-li pokračovat, je povoleno zpracování, funkce set errno na EINVAL a vrátit se EINVAL.

Také, pokud je vyrovnávací paměť příliš malá, vrátí tyto funkce ERANGE.Mohou vyvolat obslužnou rutinu neplatný parametr.Jejich zapsání velikost použité vyrovnávací paměti v pReturnValuea tím umožňují programům pro volání funkce s větší vyrovnávací paměť.

Poznámky

getenv_s Funkce prohledá seznam proměnných prostředí pro varname.getenv_sje malá a velká písmena v operačním systému Windows.getenv_sa _putenv_s pomocí kopie prostředí, které se odkazuje globální proměnnou _environ přístup k prostředí.getenv_sfunguje pouze u datových struktur, které jsou k dispozici knihovna run-time a nikoli na životní prostředí "segment", který je vytvořen pro proces operačním systémem.Proto programech, které používají envp argument hlavní nebo wmain může načíst neplatné informace.

_wgetenv_sje verzí širokého znaku getenv_s; argument a vrací hodnotu _wgetenv_s jsou řetězci širokého znaku._wenviron Globální proměnná je verzí širokého znaku _environ.

V programu znakové sady MBCS (například v programu SBCS ASCII) _wenviron je původně NULL protože prostředí je tvořeno vícebajtové znakové řetězce.Poté na první volání _wputenv, nebo při prvním volání _wgetenv_s, je-li prostředí (znaková sada MBCS) již existuje, odpovídající prostředí-široký znak je vytvořen a je potom odkazuje _wenviron.

Podobně v Unicode (_wmain) programu, _environ je původně NULL protože prostředí se skládá z řetězce širokého znaku.Poté na první volání _putenv, nebo při prvním volání getenv_s (Unicode) prostředí již existuje-li, odpovídající znakové sady MBCS prostředí je vytvořena a je potom 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 a to má za následek pomalejší doba spuštění.Například při volání _putenv, volání _wputenv se rovněž provádí automaticky tak, že odpovídají prostředí dva řetězce.

Poznámka k upozornění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í, verze dvou prostředí nemusí odpovídat přesně.Tato situace nastane, protože ačkoliv libovolný jedinečný řetězec vícebajtových znaků 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ý.Další informace naleznete v tématu _environ _wenviron.

[!POZNÁMKA]

_putenv_s a _getenv_s rodin funkcí jsou vláknově bezpečné._getenv_smůže vrátit ukazatel na řetězec při _putenv_s je úprava řetězce a tím způsobit náhodné selhání.Ujistěte se, že volání na tyto funkce jsou synchronizovány.

V jazyce C++ použití těchto funkcí je zjednodušeno díky přetížení šablony; přetížení můžete odvodit vyrovnávací paměti automaticky a tím eliminovat potřebu určit velikost argumentu.Další informace naleznete v tématu Přetížení šablony zabezpečení.

Mapování rutiny obecného textu

TCHAR.Byla zahájena rutina h

_UNICODE & _MBCS není definováno

_MBCS, definice

_UNICODE definována

_tgetenv_s

getenv_s

getenv_s

_wgetenv_s

Chcete-li zkontrolovat nebo změnit hodnotu TZ proměnné, použijte prostředí getenv_s, _putenv, a _tzset, jak je požadováno.Další informace o TZ, viz _tzset a _daylight, _dstbias, _timezone a _tzname.

Požadavky

Byla zahájena rutina

Požadované záhlaví

getenv_s

<stdlib.h>

_wgetenv_s

<stdlib.h> nebo <wchar.h>

Další informace o kompatibilitě, viz Kompatibilita.

Příklad

// crt_getenv_s.c
// This program uses getenv_s 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;
   size_t requiredSize;

   getenv_s( &requiredSize, NULL, 0, "LIB");
   if (requiredSize == 0)
   {
      printf("LIB doesn't exist!\n");
      exit(1);
   }

   libvar = (char*) malloc(requiredSize * sizeof(char));
   if (!libvar)
   {
      printf("Failed to allocate memory!\n");
      exit(1);
   }

   // Get the value of the LIB environment variable.
   getenv_s( &requiredSize, libvar, requiredSize, "LIB" );

   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_s( "LIB", "c:\\mylib;c:\\yourlib" );

   getenv_s( &requiredSize, NULL, 0, "LIB");

   libvar = (char*) realloc(libvar, requiredSize * sizeof(char));
   if (!libvar)
   {
      printf("Failed to allocate memory!\n");
      exit(1);
   }

   // Get the new value of the LIB environment variable. 
   getenv_s( &requiredSize, libvar, requiredSize, "LIB" );

   printf( "New LIB variable is: %s\n", libvar );

   free(libvar);
}
  

Ekvivalent v rozhraní .NET Framework

System::Environment::GetEnvironmentVariable

Viz také

Referenční dokumentace

Proces a řízení prostředí

Konstanty životního prostředí

_putenv _wputenv

_dupenv_s _wdupenv_s