getenv
, _wgetenv
Ruft einen Wert aus der aktuellen Umgebung ab. Sicherere Versionen dieser Funktionen sind verfügbar; siehe getenv_s
, _wgetenv_s
.
Wichtig
Diese API kann nicht in Anwendungen verwendet werden, die in Windows-Runtime ausgeführt werden. Weitere Informationen finden Sie im Artikel CRT functions not supported in Universal Windows Platform apps (In Apps für die universelle Windows-Plattform nicht unterstützte CRT-Funktionen).
Syntax
char *getenv(
const char *varname
);
wchar_t *_wgetenv(
const wchar_t *varname
);
Parameter
varname
Umgebungsvariablenname.
Rückgabewert
Gibt einen Zeiger auf den Umgebungstabelleneintrag zurück, der varname
enthält. Es ist nicht sicher, den Wert der Umgebungsvariable mithilfe des zurückgegebenen Zeigers zu ändern. Verwenden Sie die Funktion _putenv
, um den Wert einer Umgebungsvariablen zu ändern. Der Rückgabewert ist NULL
, wenn varname
er in der Umgebungstabelle nicht gefunden wird.
Hinweise
Die getenv
-Funktion sucht die Liste von Umgebungsvariablen für varname
. getenv
die Groß-/Kleinschreibung im Windows-Betriebssystem nicht beachtet wird. getenv
und _putenv
verwenden die Kopie der Umgebung, auf die die globale Variable _environ
verweist, um auf die Umgebung zuzugreifen. getenv
arbeitet nur auf den Datenstrukturen, auf die die Laufzeitbibliothek zugreifen kann, und nicht auf dem Umgebungssegment, das vom Betriebssystem für den Prozess erstellt wurde. Daher können Programme, die das envp
Argument main
verwenden, ungültige Informationen abrufen oder wmain
abrufen.
Wenn varname
dies der Fall ist NULL
, ruft diese Funktion einen ungültigen Parameterhandler auf, wie in der Parameterüberprüfung beschrieben. Wenn die weitere Ausführung zugelassen wird, legt diese Funktion errno
auf EINVAL
fest und gibt NULL
zurück.
_wgetenv
ist eine Breitzeichenversion von getenv
. Das Argument und der Rückgabewert von _wgetenv
sind Zeichenfolgen mit Breitzeichen. Die globale _wenviron
-Variable ist eine Breitzeichen-Version von _environ
.
In einem MBCS-Programm (z. B. in einem SBCS-ASCII-Programm), ist _wenviron
zunächst NULL
, da die Umgebung aus den Multibyte-Zeichenfolgen besteht. Beim ersten Aufruf von _wputenv
oder beim ersten Aufruf von _wgetenv
(sofern bereits eine (MBCS)-Umgebung vorhanden ist), wird dann eine entsprechende Breitzeichenumgebung erstellt, auf die dann _wenviron
verweist.
In einem Unicodeprogramm (_wmain
) ist _environ
dementsprechend NULL
, da die Umgebung aus Zeichenfolgen mit Breitzeichen besteht. Beim ersten Aufruf von _putenv
oder beim ersten Aufruf von getenv
(sofern bereits eine (Unicode)-Umgebung vorhanden ist), wird dann eine entsprechende MBCS-Umgebung erstellt, auf die dann _environ
verweist.
Wenn zwei Kopien der Umgebung (MBCS und Unicode) gleichzeitig in einem Programm vorhanden sind, muss maindas Laufzeitsystem beide Kopien enthalten, was zu einer langsameren Ausführungszeit führt. Beispielsweise erfolgt bei jedem Aufruf von _putenv
automatisch auch ein Aufruf von _wputenv
, damit die beiden Umgebungszeichenfolgen übereinstimmen.
Achtung
In seltenen Fällen entspricht diese beiden Umgebungsversionen möglicherweise nicht genau, wenn das Laufzeitsystem mainsowohl eine Unicode-Version als auch eine Multibyte-Version der Umgebung enthält. Dies liegt daran, dass die Zuordnung von einer eindeutigen Unicodezeichenfolge zu einer Multibyte-Zeichenfolge nicht unbedingt eindeutig ist, obwohl sich jede eindeutige Multibyte-Zeichenfolge einer eindeutigen Unicodezeichenfolge zuordnen lässt. Weitere Informationen finden Sie unter _environ
, _wenviron
verwalten.
Hinweis
Die Familien _putenv
und _getenv
der Funktionen sind nicht threadsicher. _getenv
gibt möglicherweise einen Zeichenfolgenzeiger zurück, während _putenv
die Zeichenfolge ändert, was zu zufälligen Fehlern führen kann. Stellen Sie sicher, dass Aufrufe dieser Funktionen synchronisiert sind.
Standardmäßig gilt der globale Zustand dieser Funktion für die Anwendung. Informationen zum Ändern dieses Verhaltens finden Sie im Global state in the CRT.
Generische Textroutinzuordnungen
TCHAR.H Routine |
_UNICODE und _MBCS nicht definiert |
_MBCS Definiert |
_UNICODE Definiert |
---|---|---|---|
_tgetenv |
getenv |
getenv |
_wgetenv |
Um den Wert der Umgebungsvariablen TZ
zu überprüfen oder zu ändern, verwenden Sie je nach Erfordernis getenv
, _putenv
und _tzset
. Weitere Informationen zu TZ
, siehe _tzset
und _daylight
, timezone
und _tzname
.
Anforderungen
Routine | Erforderlicher Header |
---|---|
getenv |
<stdlib.h> |
_wgetenv |
<stdlib.h> oder <wchar.h> |
Weitere Informationen zur Kompatibilität finden Sie unter Kompatibilität.
Beispiel
// 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
Siehe auch
Prozess- und Umgebungskontrolle
_putenv
, _wputenv
Umweltkonstanten
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für