_environ
, _wenviron
La variabile _environ
è un puntatore ad un array di puntatori a stringhe di caratteri multibyte che costituiscono l'ambiente del processo. Questa variabile globale è stata deprecata per le versioni funzionali più sicure , _wgetenv_s
e _putenv_s
, _wputenv_s
che devono essere usate al posto della variabile globale.getenv_s
_environ
viene dichiarato in Stdlib.h.
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
extern char **_environ;
Osservazioni:
In un programma che usa la funzione main
, _environ
è inizializzato all'avvio del programma in base alle impostazioni adottate dall'ambiente del sistema operativo. L'ambiente è costituito da uno o più voci del modulo
ENVVARNAME
=string
getenv_s
e putenv_s
usano la variabile _environ
per accedere e modificare la tabella dell'ambiente. Quando _putenv
viene chiamato per aggiungere o eliminare le impostazioni di ambiente, le dimensioni della tabella dell'ambiente cambiano. La posizione in memoria può anche cambiare, a seconda dei requisiti di memoria del programma. Il valore di _environ
viene adattato automaticamente.
La variabile _wenviron
, dichiarata in Stdlib.h come:
extern wchar_t **_wenviron;
è una versione a caratteri wide di _environ
. In un programma che usa la funzione wmain
, _wenviron
è inizializzato all'avvio del programma in base alle impostazioni adottate dall'ambiente del sistema operativo.
In un programma che usa main
, _wenviron
è inizialmente NULL
perché l'ambiente è costituito da stringhe di caratteri multibyte. Alla prima chiamata a _wgetenv
o a _wputenv
, viene creato un ambiente corrispondente alla stringa con caratteri wide e a cui punta _wenviron
.
Allo stesso modo, in un programma che usa wmain
, _environ
inizialmente è NULL
perché l'ambiente è costituito da stringhe di caratteri wide. Alla prima chiamata a _getenv
o a _putenv
, viene creato un ambiente corrispondente alla stringa con caratteri multibyte 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 di runtime gestisce 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. Di conseguenza, due stringhe Unicode distinte possono eseguire il mapping della stessa stringa multibyte.
Il polling _environ
in un contesto Unicode non è necessario quando viene usato il collegamento /MD o /MDd
. Per la DLL CRT, il tipo (wide o multibyte) del programma è sconosciuto. Verrà creato solo il tipo multibyte perché è lo scenario che si presenta più spesso.
Lo pseudo-codice seguente illustra come può verificarsi questa creazione.
int i, j;
i = _wputenv( "env_var_x=string1" ); // results in the implicit call:
// putenv ("env_var_z=string1")
j = _wputenv( "env_var_y=string2" ); // also results in implicit call:
// putenv("env_var_z=string2")
Nella notazione usata per questo esempio le stringhe di caratteri non sono valori letterali stringa C; sono invece segnaposto che rappresentano valori letterali stringa di ambiente Unicode nelle stringhe di _wputenv
ambiente di chiamata e multibyte nella putenv
chiamata. I segnaposto carattere '' e 'x
y
' nelle due stringhe di ambiente Unicode distinte non vengono mappati in modo univoco ai caratteri nell'oggetto MBCS corrente. Invece, entrambi eseguono il mapping a qualche carattere MBCS 'z
' che è il risultato predefinito del tentativo di conversione delle stringhe.
Pertanto, nell'ambiente multibyte, il valore di "env_var_z
" dopo la prima chiamata implicita a putenv
sarebbe "string1
", ma questo valore verrà sovrascritto alla seconda chiamata implicita a putenv
, quando il valore di "env_var_z
" è impostato su "string2
". Di conseguenza l'ambiente Unicode (in _wenviron
) e l'ambiente multibyte (in _environ
) differirebbero seguendo questa serie di chiamate.
Vedi anche
Variabili globali
getenv
, _wgetenv
getenv_s
, _wgetenv_s
_putenv
, _wputenv
_putenv_s
, _wputenv_s