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 varname
element . 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 varname
elementu . 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 NULL
to , 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ą ; getenv
argument 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 _wputenv
lub 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 _putenv
lub przy pierwszym wywołaniu do getenv
środowiska (Unicode) jest już tworzone odpowiednie środowisko MBCS, a następnie jest wskazywane przez _environ
.
Gdy dwie kopie środowiska (MBCS i Unicode) istnieją jednocześnie w programie, system czasu wykonywania musi obsługiwać obie kopie, co powoduje wolniejszy czas wykonywania. Na przykład za każdym razem, gdy wywołasz _putenv
metodę , 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 utrzymuje zarówno wersję Unicode, jak i wielobajtową wersję ś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 rutyna |
_UNICODE i _MBCS niezdefiniowane |
_MBCS zdefiniowany |
_UNICODE zdefiniowany |
---|---|---|---|
_tgetenv |
getenv |
getenv |
_wgetenv |
Aby sprawdzić lub zmienić wartość zmiennej środowiskowej TZ
, użyj polecenia getenv
i _putenv
_tzset
w razie potrzeby. Aby uzyskać więcej informacji na temat TZ
, zobacz _tzset
i _daylight
, timezone
i _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