getenv
, _wgetenv
Ottiene un valore dall'ambiente corrente. Sono disponibili versioni più sicure di queste funzioni; vedere getenv_s
, _wgetenv_s
.
Importante
Non è possibile usare questa API nelle applicazioni eseguite in Windows Runtime. Per altre informazioni, vedere Funzioni CRT non supportate nelle app della piattaforma UWP (Universal Windows Platform).
Sintassi
char *getenv(
const char *varname
);
wchar_t *_wgetenv(
const wchar_t *varname
);
Parametri
varname
Nome della variabile di ambiente.
Valore restituito
Restituisce un puntatore alla voce della tabella dell'ambiente contenente varname
. Non è sicuro modificare il valore della variabile di ambiente usando il puntatore restituito. Per modificare il valore di una variabile di ambiente, usare la funzione _putenv
. Il valore restituito è NULL
se varname
non viene trovato nella tabella dell'ambiente.
Osservazioni:
La funzione getenv
cerca varname
nell'elenco delle variabili di ambiente. getenv
non fa distinzione tra maiuscole e minuscole nel sistema operativo Windows. getenv
e _putenv
usano la copia dell'ambiente puntato dalla variabile globale _environ
per accedere all'ambiente. getenv
funziona solo nelle strutture dati che hanno accesso alla libreria di runtime e non sul "segmento" dell'ambiente creato per il processo dal sistema operativo. Pertanto, i programmi che utilizzano l'argomento envp
per main
o wmain
possono recuperare informazioni non valide.
Se varname
è NULL
, questa funzione richiama un gestore di parametri non validi, come descritto in Convalida dei parametri. Se l'esecuzione può continuare, la funzione imposta errno
suEINVAL
e restituisce NULL
.
_wgetenv
è una versione a caratteri wide di getenv
. L'argomento e il valore restituito di _wgetenv
sono stringhe a caratteri wide. La variabile globale _wenviron
è una versione a caratteri wide di _environ
.
In un programma MBCS (ad esempio, in un programma ASCII SBCS), _wenviron
inizialmente è NULL
perché l'ambiente è costituito da stringhe di caratteri multibyte. Quindi, alla prima chiamata a _wputenv
o alla prima chiamata a _wgetenv
se un ambiente (MBCS) esiste già, un ambiente di stringhe di caratteri wide corrispondente viene creato e viene puntato da _wenviron
.
Allo stesso modo, in un programma Unicode (_wmain
), _environ
inizialmente è NULL
perché l'ambiente è costituito da stringhe di caratteri wide. Quindi, alla prima chiamata a _putenv
o alla prima chiamata a getenv
se un ambiente (Unicode) esiste già, un ambiente MBCS corrispondente viene creato e a cui punta _environ
.
Quando due copie dell'ambiente (MBCS e Unicode) sono presenti contemporaneamente in un programma, il sistema runtime deve mantenere entrambe le copie, implicando tempi di esecuzione più lenti. Ad esempio, ogni volta che viene chiamato _putenv
, viene eseguita automaticamente una chiamata anche a _wputenv
, in modo che le due stringhe dell'ambiente corrispondano.
Attenzione
In rare occasioni, quando il sistema runtime mantiene sia una versione Unicode che una versione multibyte dell'ambiente, queste due versioni dell'ambiente potrebbero non corrispondere esattamente. Questo si verifica perché, sebbene ogni stringa univoca di caratteri multibyte esegua il mapping a una stringa Unicode univoca, il mapping da una stringa Unicode univoca a una stringa di caratteri multibyte non è necessariamente univoco. Per altre informazioni, vedere _environ
e _wenviron
.
Nota
Le famiglie di funzioni _putenv
e _getenv
non sono thread-safe. _getenv
potrebbe restituire un puntatore di stringa mentre _putenv
sta modificando la stringa, causando errori casuali. Assicurarsi che le chiamate alle funzioni siano sincronizzate.
Per impostazione predefinita, lo stato globale di questa funzione è limitato all'applicazione. Per modificare questo comportamento, vedere Stato globale in CRT.
Mapping di routine di testo generico
TCHAR.H routine |
_UNICODE e _MBCS non definito |
_MBCS definito |
_UNICODE definito |
---|---|---|---|
_tgetenv |
getenv |
getenv |
_wgetenv |
Per controllare o modificare il valore della variabile di ambiente TZ
, utilizzare getenv
, _putenv
e _tzset
, in base alle esigenze. Per altre informazioni su TZ
, vedere _tzset
e _daylight
, timezone
e _tzname
.
Requisiti
Ciclo | Intestazione obbligatoria |
---|---|
getenv |
<stdlib.h> |
_wgetenv |
<stdlib.h> oppure <wchar.h> |
Per altre informazioni sulla compatibilità, vedere Compatibility (Compatibilità).
Esempio
// 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
Vedi anche
Processo e controllo dell'ambiente
_putenv
, _wputenv
Costanti ambientali