Namespaces
Variants

getenv, getenv_s

From cppreference.net
Definiert in Header <stdlib.h>
char * getenv ( const char * name ) ;
(1)
errno_t getenv_s ( size_t * restrict len, char * restrict value,
rsize_t valuesz, const char * restrict name ) ;
(2) (seit C11)
1) Sucht nach einer Umgebungsvariable mit dem Namen name in der host-spezifischen Umgebungsliste und gibt einen Zeiger auf die Zeichenkette zurück, die der gefundenen Umgebungsvariable zugeordnet ist. Die Menge der Umgebungsvariablen und die Methoden zu deren Änderung sind implementierungsdefiniert.
Diese Funktion muss nicht thread-sicher sein. Ein weiterer Aufruf von getenv , sowie ein Aufruf der POSIX-Funktionen setenv() , unsetenv() und putenv() kann den von einem vorherigen Aufruf zurückgegebenen Zeiger ungültig machen oder die Zeichenkette aus einem vorherigen Aufruf modifizieren.
Das Ändern der Zeichenkette, die von getenv zurückgegeben wird, ruft undefiniertes Verhalten hervor.
2) Gleich wie (1) , außer dass die Werte der Umgebungsvariable in den benutzerbereitgestellten Puffer value geschrieben werden (sofern nicht null) und die Anzahl der geschriebenen Bytes an der benutzerbereitgestellten Position * len gespeichert wird (sofern nicht null). Wenn die Umgebungsvariable in der Umgebung nicht gesetzt ist, wird null in * len geschrieben (sofern nicht null) und ' \0 ' wird in value [ 0 ] geschrieben (sofern nicht null). Zusätzlich werden folgende Fehler zur Laufzeit erkannt und rufen den aktuell installierten constraint handler auf:
  • name ist ein null pointer
  • valuesz ist größer als RSIZE_MAX
  • value ist ein null pointer und valuesz ist nicht null
Wie bei allen bounds-checked functions ist getenv_s nur garantiert verfügbar, wenn __STDC_LIB_EXT1__ durch die Implementierung definiert ist und wenn der Benutzer __STDC_WANT_LIB_EXT1__ auf den Integer-Konstantenwert 1 setzt, bevor <stdlib.h> eingebunden wird.

Inhaltsverzeichnis

Parameter

name - nullterminierte Zeichenkette, die den Namen der zu suchenden Umgebungsvariable identifiziert
len - Zeiger auf einen benutzerbereitgestellten Speicherort, an dem getenv_s die Länge der Umgebungsvariable speichern wird
value - Zeiger auf ein benutzerbereitgestelltes Zeichenarray, in dem getenv_s den Inhalt der Umgebungsvariable speichern wird
valuesz - maximale Anzahl von Zeichen, die getenv_s in dest schreiben darf (Größe des Puffers)

Rückgabewert

1) Zeichenkette, die den Wert der Umgebungsvariable identifiziert, oder Nullzeiger, falls eine solche Variable nicht gefunden wurde.
2) Null, wenn die Umgebungsvariable gefunden wurde, nicht Null, wenn sie nicht gefunden wurde oder wenn eine Laufzeitbedingungsverletzung auftrat. Bei jedem Fehler wird Null in * len geschrieben (es sei denn, len ist ein Nullzeiger).

Hinweise

Auf POSIX-Systemen sind die Umgebungsvariablen auch über die globale Variable environ zugänglich, deklariert als extern char ** environ ; in <unistd.h> , sowie über den optionalen dritten Parameter, envp , der main-Funktion .

Der Aufruf von getenv_s mit einem Nullzeiger für value und null für valuesz wird verwendet, um die Größe des Puffers zu bestimmen, der benötigt wird, um das gesamte Ergebnis aufzunehmen.

Beispiel

#include <stdio.h>
#include <stdlib.h>
int main(void)
{
    const char *name = "PATH";
    const char *env_p = getenv(name);
    if (env_p)
        printf("Your %s is %s\n", name, env_p);
}

Mögliche Ausgabe:

Your PATH is /home/gamer/.local/bin:/usr/local/bin:/usr/bin:/bin:/usr/share/games
**Übersetzungserläuterungen:** - "Run this code" → "Diesen Code ausführen" (professionelle Übersetzung für Code-Ausführung) - "Possible output:" → "Mögliche Ausgabe:" (standardisierte Übersetzung in technischen Dokumentationen) - HTML-Tags, Attribute und Code innerhalb der `
`-Tags wurden unverändert belassen
- C++ spezifische Begriffe wie "PATH", "getenv", "printf" wurden nicht übersetzt
- Die Formatierung und Struktur der HTML-Elemente wurde vollständig beibehalten

Referenzen

  • C23-Standard (ISO/IEC 9899:2024):
  • 7.22.4.6 Die getenv-Funktion (S.: TBD)
  • K.3.6.2.1 Die getenv_s-Funktion (S.: TBD)
  • C17-Standard (ISO/IEC 9899:2018):
  • 7.22.4.6 Die getenv-Funktion (S: 256-257)
  • K.3.6.2.1 Die getenv_s-Funktion (S: 440-441)
  • C11-Standard (ISO/IEC 9899:2011):
  • 7.22.4.6 Die getenv-Funktion (S. 352-353)
  • K.3.6.2.1 Die getenv_s-Funktion (S. 606-607)
  • C99-Standard (ISO/IEC 9899:1999):
  • 7.20.4.5 Die getenv-Funktion (S. 317)
  • C89/C90 Standard (ISO/IEC 9899:1990):
  • 4.10.4.4 Die getenv-Funktion

Siehe auch