Namespaces
Variants

getenv, getenv_s

From cppreference.net
Défini dans l'en-tête <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) (depuis C11)
1) Recherche une variable d'environnement avec le nom name dans la liste d'environnement spécifiée par l'hôte et retourne un pointeur vers la chaîne associée à la variable d'environnement correspondante. L'ensemble des variables d'environnement et les méthodes pour les modifier sont définis par l'implémentation.
Cette fonction n'est pas requise d'être thread-safe. Un autre appel à getenv , ainsi qu'un appel aux fonctions POSIX setenv() , unsetenv() , et putenv() peut invalider le pointeur retourné par un appel précédent ou modifier la chaîne obtenue d'un appel précédent.
Modifier la chaîne renvoyée par getenv provoque un comportement indéfini.
2) Identique à (1) , sauf que les valeurs de la variable d'environnement sont écrites dans le tampon fourni par l'utilisateur value (sauf s'il est nul) et le nombre d'octets écrits est stocké à l'emplacement fourni par l'utilisateur * len (sauf s'il est nul). Si la variable d'environnement n'est pas définie dans l'environnement, zéro est écrit dans * len (sauf s'il est nul) et ' \0 ' est écrit dans value [ 0 ] (sauf s'il est nul). De plus, les erreurs suivantes sont détectées à l'exécution et appellent la fonction gestionnaire de contraintes actuellement installée :
  • name est un pointeur nul
  • valuesz est supérieur à RSIZE_MAX
  • value est un pointeur nul et valuesz n'est pas zéro
Comme pour toutes les fonctions à vérification de limites, getenv_s n'est garantie d'être disponible que si __STDC_LIB_EXT1__ est défini par l'implémentation et si l'utilisateur définit __STDC_WANT_LIB_EXT1__ à la constante entière 1 avant d'inclure <stdlib.h> .

Table des matières

Paramètres

name - chaîne de caractères terminée par un caractère nul identifiant le nom de la variable d'environnement à rechercher
len - pointeur vers un emplacement fourni par l'utilisateur où getenv_s stockera la longueur de la variable d'environnement
value - pointeur vers un tableau de caractères fourni par l'utilisateur où getenv_s stockera le contenu de la variable d'environnement
valuesz - nombre maximum de caractères que getenv_s est autorisé à écrire dans dest (taille du tampon)

Valeur de retour

1) chaîne de caractères identifiant la valeur de la variable d'environnement ou pointeur nul si une telle variable n'est pas trouvée.
2) zéro si la variable d'environnement a été trouvée, non-zéro si elle n'a pas été trouvée ou si une violation de contrainte d'exécution s'est produite. En cas d'erreur, écrit zéro dans * len (sauf si len est un pointeur nul).

Notes

Sur les systèmes POSIX, les variables d'environnement sont également accessibles via la variable globale environ , déclarée comme extern char ** environ ; dans <unistd.h> , et via le troisième argument optionnel, envp , de la fonction main .

L'appel à getenv_s avec un pointeur nul pour value et zéro pour valuesz est utilisé pour déterminer la taille du tampon nécessaire pour contenir l'intégralité du résultat.

Exemple

#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);
}

Sortie possible :

Your PATH is /home/gamer/.local/bin:/usr/local/bin:/usr/bin:/bin:/usr/share/games

Références

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

Voir aussi