Freigeben über


getenv_s, _wgetenv_s

Ruft einen Wert aus der aktuellen Umgebung ab.Diese Versionen von getenv, _wgetenv haben Sicherheitserweiterungen, wie in Sicherheitsfeatures im CRT beschrieben.

Wichtiger HinweisWichtig

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

errno_t getenv_s( size_t *pReturnValue, char* buffer, size_t numberOfElements, const char *varname ); errno_t _wgetenv_s( size_t *pReturnValue, wchar_t *buffer, size_t numberOfElements, const wchar_t *varname ); template <size_t size> errno_t getenv_s( size_t *pReturnValue, char (&buffer)[size], const char *varname ); // C++ only template <size_t size> errno_t _wgetenv_s( size_t *pReturnValue, wchar_t (&buffer)[size], const wchar_t *varname ); // C++ only

Parameter

  • pReturnValue
    Die Puffergröße, die erforderlich ist oder 0, wenn die Variable nicht gefunden wird.

  • buffer
    Puffer, in der der Wert der Umgebungsvariablen zu speichern.

  • numberOfElements
    Größe von buffer.

  • varname
    Umgebungsvariablenname.

Rückgabewert

Null erfolgreich, wenn andernfalls ein Fehlercode auf Fehler.

Fehlerbedingungen

pReturnValue

buffer

numberOfElements

varname

Rückgabewert

NULL

any

any

any

EINVAL

any

NULL

>0

any

EINVAL

any

any

any

NULL

EINVAL

Alle Fehlerbedingungen ruft einen ungültigen Parameterhandler auf, wie in Parametervalidierung beschrieben.Wenn die Ausführung zulässig ist, um fortzufahren, legen die Funktionen errno auf EINVAL fest und geben EINVAL zurück.

Wenn der Puffer zu klein ist, geben diese Funktionen ERANGE zurück.Sie rufen keinen ungültigen Parameterhandler auf.Sie schreiben die erforderliche Puffergröße in pReturnValue aus und aktivieren insofern Programme, um die Funktion mit einem größeren Puffer erneut aufzurufen.

Hinweise

Die getenv_s-Funktion sucht die Liste der Umgebungsvariablen für varname.getenv_s ist nicht im Windows-Betriebssystem die Groß-/Kleinschreibung beachtet.getenv_s und _putenv_s verwenden die Kopie der Umgebung, die durch die globale Variable _environ dargestellt werden, um auf die Umgebung auf.getenv_s kann nur für den Datenstrukturen, die der Laufzeitbibliothek und nicht auf der Umgebung "Segment" zugegriffen werden kann, die für den Prozess vom Betriebssystem erstellt wird.Daher könnten Programme, die das envp-Argument zu Haupt- oder zu wmain verwenden, ungültige Informationen ab.

_wgetenv_s ist eine Breitzeichen-Version von getenv_s; das Argument und der Rückgabewert von _wgetenv_s sind Breitzeichen-Zeichenfolgen.Die globale Variable _wenviron ist eine Breitzeichen-Version von _environ.

In einem MBCS-Programm (beispielsweise, in einem SBCS-ASCII-Programm), ist _wenviron zuerst NULL, da die Umgebung von Mehrbyte-Zeichenfolgen besteht.Anschließend beim ersten Aufruf von _wputenv oder beim ersten Aufruf von _wgetenv_s, wenn eine Umgebung (MBCS) bereits vorhanden ist, wird eine entsprechende Breitzeichen-Umgebung erstellt und wird anschließend durch _wenviron gezeigt.

Ähnlich wie in einem Unicode-(_wmain)-Programm ist _environ zuerst NULL, da die Umgebung aus Zeichenfolgen mit Breitzeichen besteht.Anschließend beim ersten Aufruf von _putenv oder beim ersten Aufruf von getenv_s, wenn Umgebung ein (Unicode) bereits vorhanden ist, wird eine entsprechende MBCS-Umgebung erstellt und wird anschließend durch _environ gezeigt.

Wenn zwei Kopien der Umgebung (MBCS und Unicode) gleichzeitig in einem Programm vorhanden sind, muss das Laufzeitsystem beide Kopien beibehalten, und dieses verursacht langsamere Ausführungszeit.Wenn Sie beispielsweise _putenv aufrufen, wird ein Aufruf _wputenv auch automatisch ausgeführt, sodass die zwei Umgebungszeichenfolgen entsprechen.

WarnhinweisVorsicht

In seltenen Fällen wenn das Laufzeitsystem eine Unicode-Version und eine - Version der Umgebung verwaltet werden, entsprechen die zwei Umgebungsversionen möglicherweise nicht genau.Dies geschieht, weil, 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.Weitere Informationen finden Sie unter _environ, _wenviron.

HinweisHinweis

Die _putenv_s und _getenv_s Familien von Funktionen sind nicht threadsicher._getenv_s konnte einen Zeichenfolgenzeiger zurückgeben, während _putenv_s die Zufallsausfälle der Zeichenfolge und dadurch die Ursache ändert.Überprüfen Sie, ob Aufrufe dieser Funktionen synchronisiert werden.

In C++ wird die Verwendung dieser Funktionen durch Vorlagenüberladungen vereinfacht; die Überladungen können Pufferlänge automatisch ableiten und die Anforderung insofern vermeiden, ein Größenargument anzugeben.Weitere Informationen finden Sie unter Speichern Sie Vorlagen-Überladungen.

Zuordnung generische Textroutinen

TCHAR.H-Routine

_UNICODE & _MBCS nicht definiert.

_MBCS definiert

_UNICODE definiert

_tgetenv_s

getenv_s

getenv_s

_wgetenv_s

So legen Sie den Wert der TZ Umgebungsvariable, Verwendung getenv_s, des _putenv und des _tzset überprüfen oder ändern, nach Bedarf.Weitere Informationen zu TZ finden Sie unter _tzset und _daylight, _dstbias, _timezone und _tzname.

Anforderungen

Routine

Erforderlicher Header

getenv_s

<stdlib.h>

_wgetenv_s

<stdlib.h> oder <wchar.h>

So zusätzlicher Kompatibilitätsinformation finden Sie unter Kompatibilität.

Beispiel

// crt_getenv_s.c
// This program uses getenv_s 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;
   size_t requiredSize;

   getenv_s( &requiredSize, NULL, 0, "LIB");
   if (requiredSize == 0)
   {
      printf("LIB doesn't exist!\n");
      exit(1);
   }

   libvar = (char*) malloc(requiredSize * sizeof(char));
   if (!libvar)
   {
      printf("Failed to allocate memory!\n");
      exit(1);
   }

   // Get the value of the LIB environment variable.
   getenv_s( &requiredSize, libvar, requiredSize, "LIB" );

   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_s( "LIB", "c:\\mylib;c:\\yourlib" );

   getenv_s( &requiredSize, NULL, 0, "LIB");

   libvar = (char*) realloc(libvar, requiredSize * sizeof(char));
   if (!libvar)
   {
      printf("Failed to allocate memory!\n");
      exit(1);
   }

   // Get the new value of the LIB environment variable. 
   getenv_s( &requiredSize, libvar, requiredSize, "LIB" );

   printf( "New LIB variable is: %s\n", libvar );

   free(libvar);
}
  

.NET Framework-Entsprechung

System::Environment::GetEnvironmentVariable

Siehe auch

Referenz

Prozess- und Umgebungssteuerelement

umgebungsbedingten Konstanten

_putenv, _wputenv

_dupenv_s, _wdupenv_s