Partager via


getenv, _wgetenv

Obtient une valeur à partir de l'environnement actuel. Des versions plus sécurisées de ces fonctions sont disponibles ; voir getenv_s, _wgetenv_s.

Important

Cette API ne peut pas être utilisée dans les applications qui s’exécutent dans le Windows Runtime. Pour plus d’informations, consultez Fonctions CRT non prises en charge dans les applications de la plateforme Windows universelle.

Syntaxe

char *getenv(
   const char *varname
);
wchar_t *_wgetenv(
   const wchar_t *varname
);

Paramètres

varname
Nom de la variable d'environnement.

Valeur retournée

Retourne un pointeur désignant l’entrée de la table d’environnement contenant varname. Il n’est pas sûr de modifier la valeur de la variable d’environnement à l’aide du pointeur retourné. Utilisez la fonction _putenv pour modifier la valeur d'une variable d'environnement. La valeur de retour est NULL si varname elle n’est pas trouvée dans la table d’environnement.

Notes

La fonction getenv recherche varname dans la liste des variables d'environnement. getenv ne respecte pas la casse dans le système d’exploitation Windows. getenv et _putenv utilisent la copie de l’environnement vers lequel la variable globale _environ pointe pour accéder à l’environnement. getenv fonctionne uniquement sur les structures de données accessibles à la bibliothèque Runtime et non sur l’environnement « segment » créé par le système d’exploitation pour le processus. Par conséquent, les programmes qui utilisent l’argument envp ou mainwmain peuvent récupérer des informations non valides.

Si varname c’est NULLle cas, cette fonction appelle un gestionnaire de paramètres non valide, comme décrit dans la validation des paramètres. Si l'exécution est autorisée à se poursuivre, cette fonction affecte la valeur errno à EINVAL et retourne NULL.

_wgetenv est une version à caractères larges de getenv ; l'argument et la valeur de retour de _wgetenv sont des chaînes à caractères larges. La variable globale _wenviron est une version à caractères larges de _environ.

Dans un programme MBCS (par exemple, un programme ASCII SBSC), la valeur initiale de _wenviron est NULL, car l'environnement se compose de chaînes de caractères multioctets. Ensuite, au premier appel à _wputenv, ou à _wgetenv s’il existe déjà un environnement (MBCS), un environnement à chaînes de caractères larges correspondant est créé, puis désigné par _wenviron.

De la même manière, dans un programme Unicode(_wmain), la valeur initiale de _environ est NULL, car l’environnement se compose de chaînes de caractères larges. Ensuite, au premier appel à _putenv ou getenv, s'il existe déjà un environnement (Unicode), un environnement MBCS correspondant est créé, puis désigné par _environ.

Lorsque deux copies de l’environnement (Mo CS et Unicode) existent simultanément dans un programme, le système d’exécution doit maincontenir les deux copies, ce qui entraîne une durée d’exécution plus lente. Par exemple, quand vous appelez _putenv, un appel à _wputenv est aussi exécuté automatiquement, de sorte que les deux chaînes d'environnement correspondent.

Attention

Dans de rares cas, lorsque le système maind’exécution maintient à la fois une version Unicode et une version multioctet de l’environnement, ces deux versions d’environnement peuvent ne pas correspondre exactement. En effet, même si une chaîne de caractères multioctets unique est mappée à une chaîne Unicode unique, le mappage d'une chaîne Unicode unique à une chaîne de caractères multioctets n'est pas nécessairement unique. Pour plus d’informations, consultez _environ, _wenviron.

Remarque

Les familles de fonctions _putenv et _getenv ne sont pas thread-safe. _getenv peut retourner un pointeur de chaîne pendant que _putenv modifie la chaîne, ce qui provoque des échecs aléatoires. Assurez-vous que les appels à ces fonctions sont synchronisés.

Par défaut, l’état global de cette fonction est limité à l’application. Pour modifier ce comportement, consultez État global dans le CRT.

Mappages de routine de texte générique

TCHAR.H Routine _UNICODE et _MBCS non défini _MBCS Défini _UNICODE Défini
_tgetenv getenv getenv _wgetenv

Pour vérifier ou modifier la valeur de la variable d’environnement TZ, utilisez getenv, _putenv et _tzset, selon les besoins. Pour plus d’informations sur TZ, voir _tzset et timezone_daylight, et ._tzname

Spécifications

Routine En-tête requis
getenv <stdlib.h>
_wgetenv <stdlib.h> ou <wchar.h>

Pour plus d’informations sur la compatibilité, consultez Compatibility.

Exemple

// crt_getenv.c
// compile with: /W3
// This program uses getenv 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;

   // Get the value of the LIB environment variable.
   libvar = getenv( "LIB" ); // C4996
   // Note: getenv is deprecated; consider using getenv_s instead

   if( libvar != NULL )
      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( "LIB=c:\\mylib;c:\\yourlib" ); // C4996
   // Note: _putenv is deprecated; consider using putenv_s instead

   // Get new value.
   libvar = getenv( "LIB" ); // C4996

   if( libvar != NULL )
      printf( "New LIB variable is: %s\n", libvar );
}
Original LIB variable is: C:\progra~1\devstu~1\vc\lib
New LIB variable is: c:\mylib;c:\yourlib

Voir aussi

Processus et contrôle d’environnement
_putenv, _wputenv
Constantes environnementales