Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Die _environ-Variable ist ein Zeiger auf ein Array Zeigern zu 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 Variablen verwendet werden sollen._environ wird in Stdlib.h deklariert.
Wichtig |
|---|
Diese API kann nicht in den Anwendungen verwendet werden, die in der Windows Runtime ausführen.Weitere Informationen finden Sie unter CRT-Funktionen unterstützt nicht mit /ZW. |
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 einem oder mehreren Einträgen 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, abhängig von den Anforderungen des Programms.Der Wert von _environ wird automatisch entsprechend angepasst.
Die _wenviron-Variable 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 zuerst NULL, da die Umgebung von Mehrbyte-Zeichenfolgen besteht.Beim ersten Aufruf zu _wgetenv oder zu _wputenv, wird eine entsprechende Breitzeichen-Umgebung erstellt und wird durch _wenviron gezeigt.
Entsprechend in einem Programm, das wmain verwendet, ist _environ zuerst NULL, da die Umgebung aus Zeichenfolgen mit Breitzeichen besteht.Beim ersten Aufruf zu _getenv oder zu _putenv, wird eine entsprechende Mehrbyte-Zeichenfolgen-Umgebung erstellt und wird durch _environ gezeigt.
Wenn zwei Kopien der Umgebung (MBCS und Unicode) gleichzeitig in einem Programm vorhanden sind, muss das Laufzeitsystem beide Kopien, Ergebnis der langsameren Ausführungszeit beibehalten.Beispielsweise wenn Sie _putenv aufrufen, wird ein Aufruf _wputenv auch automatisch ausgeführt, sodass die zwei Umgebungszeichenfolgen entsprechen.
Vorsicht |
|---|
In seltenen Fällen wenn das Laufzeitsystem eine Unicode-Version und eine - Version der Umgebung beibehält, entsprächen diese Versionen möglicherweise mit zwei Umgebungen nicht genau.Dies liegt daran, dass, obwohl keine eindeutigen Mehrbyte-Zeichenfolgen-Zuordnungen zu einer eindeutigen Unicode-Zeichenfolge, die Zuordnung von einer eindeutigen Unicode-Zeichenfolge in einer Mehrbyte-Zeichenfolge nicht unbedingt eindeutig ist.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 (breit oder Mehrbyt) des Programms unbekannt.Nur der - Typ wird erstellt, da es das wahrscheinlichste Szenario ist.
Der folgende Pseudocode veranschaulicht, wie dieser geschehen 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, sind die Zeichenfolgen nicht C-Zeichenfolgenliterale; sondern sind sie Platzhalter, die Unicode-Umgebungszeichenfolgenliterale im _wputenv Aufruf und - Umgebungszeichenfolgen im putenv Aufruf darstellen.Die Zeichenplatzhalter 'x' und 'y' in den zwei verschiedenen Unicode-Umgebungszeichenfolgen ordnen eindeutig nicht zu Zeichen im aktuellen MBCS in.Stattdessen ordnen beide zu einem MBCS Zeichen 'z' zu, das das Ergebnis des Versuchs, die Zeichenfolgen zu konvertieren ist.
In der vom Umgebung, wird der Wert von "env_var_z", nachdem der erste impliziten Aufruf putenv "string1" wäre, der Wert jedoch auf dem zweiten impliziten Aufruf putenv überschrieben, wenn der Wert von "env_var_z" in "string2" festgelegt ist.Die Unicode-Umgebung (in _wenviron) und die - Umgebung (in _environ) müssen daher unterscheiden, dieser Reihe von Aufrufen einsetzen.
Wichtig