Udostępnij przez


getenv, _wgetenv

Pobiera wartość z bieżącego środowiska. Dostępne są bezpieczniejsze wersje tych funkcji; zobacz getenv_s, _wgetenv_s.

Ważne

Tego interfejsu API nie można używać w aplikacjach wykonywanych w środowisko wykonawcze systemu Windows. Aby uzyskać więcej informacji, zobacz Funkcje CRT nieobsługiwane w aplikacjach platforma uniwersalna systemu Windows.

Składnia

char *getenv(
   const char *varname
);
wchar_t *_wgetenv(
   const wchar_t *varname
);

Parametry

varname
Nazwa zmiennej środowiskowej.

Wartość zwracana

Zwraca wskaźnik do wpisu tabeli środowiska zawierającego varnameelement . Nie można bezpiecznie zmodyfikować wartości zmiennej środowiskowej przy użyciu zwróconego wskaźnika. _putenv Użyj funkcji , aby zmodyfikować wartość zmiennej środowiskowej. Wartość zwracana jest NULL , jeśli varname nie zostanie znaleziona w tabeli środowiska.

Uwagi

Funkcja getenv wyszukuje listę zmiennych środowiskowych dla varnameelementu . getenv nie uwzględnia wielkości liter w systemie operacyjnym Windows. getenv i _putenv użyj kopii środowiska wskazywanej przez zmienną globalną _environ , aby uzyskać dostęp do środowiska. getenv działa tylko na strukturach danych dostępnych dla biblioteki czasu wykonywania, a nie w środowisku "segment" utworzonym dla procesu przez system operacyjny. W związku z tym programy używające argumentu envp do main lub wmain mogą pobierać nieprawidłowe informacje.

Jeśli varname jest NULLto , ta funkcja wywołuje nieprawidłową procedurę obsługi parametrów, zgodnie z opisem w temacie Weryfikacja parametrów. Jeśli wykonywanie jest dozwolone do kontynuowania, ta funkcja ustawia errno wartość EINVAL i zwraca wartość NULL.

_wgetenv jest wersją szerokoznakową ; getenvargument i wartość zwracana _wgetenv są ciągami o szerokim znaku. Zmienna _wenviron globalna jest wersją o szerokim znaku _environ.

W programie MBCS (na przykład w programie SBCS ASCII) _wenviron początkowo NULL środowisko składa się z ciągów wielobajtowych znaków. Następnie przy pierwszym wywołaniu metody _wputenvlub przy pierwszym wywołaniu do _wgetenv środowiska (MBCS) już istnieje, tworzone jest odpowiednie środowisko ciągów szerokoznakowych, a następnie wskazywane przez _wenviron.

Podobnie w programie _environ Unicode (_wmain) początkowo środowisko NULL składa się z ciągów wieloznakowych. Następnie przy pierwszym wywołaniu metody _putenvlub przy pierwszym wywołaniu do getenv środowiska (Unicode) jest już tworzone odpowiednie środowisko MBCS, a następnie jest wskazywane przez _environ.

Gdy dwa kopie środowiska (MBCS i Unicode) istnieją jednocześnie w programie, system czasu wykonywania musi maintain obu kopii, co powoduje wolniejsze czas wykonywania. Na przykład za każdym razem, gdy wywołasz _putenvmetodę , wywołanie _wputenv metody jest również wykonywane automatycznie, tak aby dwa ciągi środowiska odpowiadały.

Uwaga

W rzadkich przypadkach, gdy system czasu wykonywania taining mainzarówno wersji Unicode, jak i wielobajtowej wersji środowiska, te dwie wersje środowiska mogą nie odpowiadać dokładnie. Dzieje się tak dlatego, że każdy unikatowy ciąg wielobajtowy mapuje na unikatowy ciąg Unicode, mapowanie z unikatowego ciągu Unicode na ciąg wielobajtowy nie musi być unikatowe. Aby uzyskać więcej informacji, zobacz _environ, _wenviron.

Uwaga

Rodziny _putenv funkcji i _getenv nie są bezpieczne wątkowo. _getenv może zwrócić wskaźnik ciągu podczas _putenv modyfikowania ciągu, powodując losowe błędy. Upewnij się, że wywołania tych funkcji są zsynchronizowane.

Domyślnie stan globalny tej funkcji jest zakresem aplikacji. Aby zmienić to zachowanie, zobacz Stan globalny w CRT.

Mapowania procedur tekstu ogólnego

TCHAR.H Rutynowych _UNICODE i _MBCS niezdefiniowane _MBCS Zdefiniowane _UNICODE Zdefiniowane
_tgetenv getenv getenv _wgetenv

Aby sprawdzić lub zmienić wartość zmiennej środowiskowej TZ , użyj polecenia getenvi _putenv_tzset w razie potrzeby. Aby uzyskać więcej informacji na temat TZ, zobacz _tzset i _daylight, timezonei _tzname.

Wymagania

Procedura Wymagany nagłówek
getenv <stdlib.h>
_wgetenv <stdlib.h> lub <wchar.h>

Aby uzyskać więcej informacji o zgodności, zobacz Zgodność.

Przykład

// 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

Zobacz też

Kontrola procesu i środowiska
_putenv, _wputenv
Stałe środowiskowe