Condividi tramite


_environ, _wenviron

La variabile di _environ è un puntatore a una matrice di puntatori a stringhe di caratteri multibyte che costituiscono l'ambiente di processo.Questa variabile globale è stata deprecata per il più funzionali versioni sicure getenv_s, _wgetenv_s e _putenv_s, _wputenv_s, che devono essere utilizzati alla variabile globale._environ viene dichiarato in Stdlib.h.

Nota importanteImportante

Questa API non può essere utilizzata nelle applicazioni che vengono eseguite in Windows Runtime.Per ulteriori informazioni, vedere Funzioni CRT non supportate con /ZW.

extern char **_environ;

Note

In un programma che utilizza la funzione di main, _environ viene inizializzato all'avvio del programma in base alle impostazioni adottate dall'ambiente del sistema operativo.L'ambiente è costituito da uno o più voci del form

ENVVARNAME=string

getenv_s e putenv_s utilizzano la variabile di _environ per accedere e modificare la tabella dell'ambiente.Quando _putenv viene chiamato per aggiungere o rimuovere le impostazioni di ambiente, le dimensioni della tabella dell'ambiente.La posizione in memoria è inoltre possibile cambiare, a seconda dei requisiti di memoria del programma.Il valore di _environ si adatta automaticamente di conseguenza.

La variabile di _wenviron, dichiarata in Stdlib.h come:

extern wchar_t **_wenviron;

è una versione a caratteri estesi di _environ.In un programma che utilizza la funzione di wmain, _wenviron viene inizializzato all'avvio del programma in base alle impostazioni adottate dall'ambiente del sistema operativo.

In un programma che utilizza main, _wenviron inizialmente è NULL perché l'ambiente è costituito di stringhe di caratteri multibyte.La prima chiamata a _wgetenv o a _wputenv, un ambiente corrispondente stringa di caratteri estesi viene creato ed è puntata da _wenviron.

Analogamente, in un programma che utilizza wmain, _environ inizialmente è NULL perché l'ambiente è costituito di stringhe di caratteri estesi.La prima chiamata a _getenv o a _putenv, un ambiente corrispondente stringa con caratteri multibyte viene creato ed è puntata da _environ.

Quando due copie dell'ambiente MBCS e Unicode) presenti contemporaneamente in un programma, il sistema runtime deve gestire entrambe le copie, con conseguente tempo di esecuzione più lenta.Ad esempio, ogni volta che si chiama _putenv, una chiamata a _wputenv viene eseguita automaticamente, in modo che le due stringhe dell'ambiente corrispondono.

Nota di avvisoAttenzione

In rare occasioni, quando il sistema in runtime viene gestito sia una versione Unicode che una versione multibyteambiente, queste versioni di due ambienti potrebbero non corrispondere esattamente.Questo perché, anche se alcuni mapping univoci della stringa con caratteri multibyte a una stringa Unicode univoca, il mapping da una stringa Unicode univoca a una stringa di caratteri multibyte non è sempre univoci.Di conseguenza, due stringhe Unicode distinte possono eseguire il mapping alla stessa stringa multibyte.

Il polling _environ in un contesto Unicode non è necessaria quando /MD o il collegamento di /MDd viene utilizzato.Per la DLL CRT, il tipo (largo o multibyte) del programma è sconosciuto.Solo il tipo multibyte verrà creato perché è lo scenario più comune.

Il seguente pseudocodice seguente ciò può verificarsi.

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 utilizzata per questo esempio, le stringhe di caratteri non sono valori letterali stringa c; invece, sono segnaposto che rappresentano valori letterali stringa dell'ambiente Unicode nella chiamata di _wputenv e le stringhe dell'ambiente di multibyte nella chiamata di putenv.I segnaposto 'x' e 'y' del carattere nelle due stringhe diverse dell'ambiente Unicode non sono associati in modo univoco ai caratteri MBCS in corrente.Invece, entrambi eseguono il mapping a un formato MBCS il carattere 'z' è 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 la seconda chiamata implicita a putenv, quando il valore di "env_var_z" è impostato su "string2".L'ambiente Unicode (in _wenviron) e l'ambiente multibyte (in _environ) è differirebbero seguendo questa serie di chiamate.

Vedere anche

Riferimenti

Variabili globali

getenv, _wgetenv

getenv_s, _wgetenv_s

_putenv, _wputenv

_putenv_s, _wputenv_s