Partager via


getenv, _wgetenv

Obtient une valeur à partir de l'environnement actuel. Des versions plus sécurisées de ces fonctions sont disponibles. Consultez 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 main wmain 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.

Quand deux copies de l'environnement (MBCS et Unicode) existent simultanément dans un programme, le système Runtime doit gérer les deux copies, ce qui entraîne des temps d'exécution plus lents. 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, quand le système Runtime gère une version Unicode et une version multioctet de l’environnement, il se peut que ces deux versions d’environnement ne correspondent pas 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 routines de texte générique

Routine TCHAR.H _UNICODE et _MBCS non définis _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