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 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
.
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
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de l’année 2024, nous abandonnerons progressivement le mécanisme de retour d’information GitHub Issues pour le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultez :Soumettre et afficher des commentaires pour