Share via


_environ, _wenviron

Die Variable _environ ist ein Zeiger auf ein Array Zeiger auf den Mehrbyte-Zeichenfolgen, die die Prozessumgebung bewerten. Diese globale Variable ist für die sichereren funktionalen Versionen getenv_s, _wgetenv_s und _putenv_s, _wputenv_s veraltet, die anstelle der globalen Variable verwendet werden sollten. _environ wird in Stdlib.h deklariert.

Wichtig

Diese API kann nicht in Anwendungen verwendet werden, die in Windows-Runtime ausgeführt werden.Weitere Informationen finden Sie unter CRT-Funktionen nicht mit /ZW unterstützt.

extern char **_environ;

Hinweise

In einem Programm, das die main-Funktion verwendet, wird _environ beim Programmstart gemäß den Einstellungen initialisiert, die von der Betriebssystemumgebung verwiesen werden. Die Umgebung besteht aus mindestens Einträge des Formulars

ENVVARNAME=string

getenv_s und putenv_s verwenden die _environ-Variable, um auf die Umgebungstabelle zuzugreifen und zu ändern. Wenn _putenv aufgerufen wird, um Umgebungseinstellungen hinzuzufügen oder zu löschen, die Umgebungstabellen-Änderungsgröße. Der Speicherort im Arbeitsspeicher wird möglicherweise auch, je nach Anforderungen des Programms. Der Wert von _environ wird automatisch entsprechend angepasst.

Die Variable _wenviron, deklariert in Stdlib.h wie:

extern wchar_t **_wenviron;

ist eine Breitzeichen-Version von _environ. In einem Programm, das die wmain-Funktion verwendet, wird _wenviron beim Programmstart gemäß den Einstellungen initialisiert, die von der Betriebssystemumgebung verwiesen werden.

In einem Programm, das main verwendet, ist _wenviron zunächst NULL, da die Umgebung aus den Mehrbyte-Zeichenfolgen besteht. Beim ersten Aufruf von _wgetenv oder _wputenv, wird eine entsprechende Breitzeichen-Umgebung erstellt und auf den durch _wenviron gezeigt.

Entsprechend in einem Programm, das wmain verwendet, ist _environ zunächst NULL, da die Umgebung aus Zeichenfolgen mit Breitzeichen besteht. Beim ersten Aufruf von _getenv oder _putenv, wird eine entsprechende Mehrbyte-Zeichenfolgen-Umgebung erstellt und auf den durch _environ gezeigt.

Wenn in einem Programm zwei Kopien der Umgebung (MBCS und Unicode) gleichzeitig vorhanden sind, muss das Laufzeitsystem beide Kopien verwalten, wodurch sich die Ausführungszeit verlangsamt. Beispielsweise erfolgt bei jedem Aufruf von _putenv automatisch auch ein Aufruf von _wputenv, damit die beiden Umgebungszeichenfolgen übereinstimmen.

Warnung

In seltenen Fällen wenn das Laufzeitsystem eine Unicode-Version und eine Mehrbyteversion der Umgebung verwaltet, entsprächen diese Versionen möglicherweise zwei Umgebungen nicht korrekt.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.Daher werden möglicherweise zwei unterschiedliche Unicode-Zeichenfolgen zur gleichen Mehrbytezeichenfolge zu.

Abrufen _environ in einem Unicode-Kontext ist bedeutungslos, wenn /MD oder /MDd-Bindung verwendet wird. Für die CRT-DLL ist der Typ (weit oder die Mehrbyte-Codepage) des Programms nicht bekannt. Nur der Mehrbytetyp wird erstellt, da es der wahrscheinlichste Fall ist.

Der folgende Pseudocode veranschaulicht, wie dieser auftreten kann.

int i, j;
i = _wputenv( "env_var_x=string1" );  // results in the implicit call:
                                      // putenv ("env_var_z=string1")
j = _wputenv( "env_var_y=string2" );  // also results in implicit call:
                                      // putenv("env_var_z=string2")

In der Notation, die für dieses Beispiel verwendet wird, werden die Zeichenfolgen nicht C-Zeichenfolgenliterale; sondern sind diese Platzhalter, die Unicode-Umgebungszeichenfolgenliterale in den _wputenv Aufrufs- und Mehrbyteumgebungszeichenfolgen im Aufruf putenv darstellen. Die Zeichenplatzhalter 'x' und 'y' in zwei unterschiedlichen Unicode-Umgebungszeichenfolgen ordnen eindeutig nicht in den Zeichen im aktuellen MBCS zu. Stattdessen weisen beide MBCS Zeichen zu einem 'z' zu, das das Standardergebnis dem Versuch, die Zeichenfolgen umwandeln ist.

In der Mehrbyteumgebung, würden der Wert "env_var_z", nachdem der erste Aufruf implizite putenv "string1" wäre, der Wert jedoch im zweiten impliziten Aufruf putenv überschrieben, wenn der Wert "env_var_z" auf "string2" festgelegt ist. Die Unicode-Umgebung (in _wenviron) und die Mehrbyteumgebung (in _environ) müssen daher unterscheiden, dieser Reihe von Aufrufen aufgeführt.

Siehe auch

Referenz

Globale Variablen

getenv, _wgetenv

getenv_s, _wgetenv_s

_putenv, _wputenv

_putenv_s, _wputenv_s