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 NULL
le 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