_environ, _wenviron_environ, _wenviron

La variabile _environ è un puntatore ad un array di puntatori a stringhe di caratteri multibyte che costituiscono l'ambiente del processo.The _environ variable is a pointer to an array of pointers to the multibyte-character strings that constitute the process environment. Questa variabile globale è stata deprecata a favore di versioni funzionali più sicure, getenv_s, _wgetenv_s e _putenv_s, _wputenv_s, che devono essere usate al posto della variabile globale.This global variable has been deprecated for the more secure functional versions getenv_s, _wgetenv_s and _putenv_s, _wputenv_s, which should be used in place of the global variable. _environ viene dichiarato in Stdlib.h._environ is declared in Stdlib.h.

Importante

Non è possibile usare questa API nelle applicazioni eseguite in Windows Runtime.This API cannot be used in applications that execute in the Windows Runtime. Per altre informazioni, vedere l'articolo relativo alle funzioni CRT non supportate con /ZW.For more information, see CRT functions not supported with /ZW.

SintassiSyntax

extern char **_environ;  

NoteRemarks

In un programma che usa la funzione main, _environ è inizializzato all'avvio del programma in base alle impostazioni adottate dall'ambiente del sistema operativo.In a program that uses the main function, _environ is initialized at program startup according to settings taken from the operating-system environment. L'ambiente è costituito da uno o più voci del moduloThe environment consists of one or more entries of the form

ENVVARNAME =stringENVVARNAME =string

getenv_s e putenv_s usano la variabile _environ per accedere e modificare la tabella dell'ambiente.getenv_s and putenv_s use the _environ variable to access and modify the environment table. Quando _putenv viene chiamato per aggiungere o eliminare le impostazioni di ambiente, le dimensioni della tabella dell'ambiente cambiano.When _putenv is called to add or delete environment settings, the environment table changes size. La posizione in memoria può anche cambiare, a seconda dei requisiti di memoria del programma.Its location in memory may also change, depending on the program's memory requirements. Il valore di _environ viene adattato automaticamente.The value of _environ is automatically adjusted accordingly.

La variabile _wenviron, dichiarata in Stdlib.h come:The _wenviron variable, declared in Stdlib.h as:

extern wchar_t **_wenviron;  

è una versione a caratteri wide di _environ.is a wide-character version of _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 a program that uses the wmain function, _wenviron is initialized at program startup according to settings taken from the operating-system environment.

In un programma che usa main, _wenviron è inizialmente NULL perché l'ambiente è costituito da stringhe di caratteri multibyte.In a program that uses main, _wenviron is initially NULL because the environment is composed of multibyte-character strings. Alla prima chiamata a _wgetenv o a _wputenv, viene creato un ambiente corrispondente alla stringa con caratteri wide e a cui punta _wenviron.On the first call to _wgetenv or _wputenv, a corresponding wide-character string environment is created and is pointed to by _wenviron.

Allo stesso modo, in un programma che usa wmain, _environ inizialmente è NULL perché l'ambiente è costituito da stringhe di caratteri wide.Similarly, in a program that uses wmain, _environ is initially NULL because the environment is composed of wide-character strings. Alla prima chiamata a _getenv o a _putenv, viene creato un ambiente corrispondente alla stringa con caratteri multibyte e a cui punta _environ.On the first call to _getenv or _putenv, a corresponding multibyte-character string environment is created and is pointed to by _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.When two copies of the environment (MBCS and Unicode) exist simultaneously in a program, the run-time system must maintain both copies, resulting in slower execution time. 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.For example, whenever you call _putenv, a call to _wputenv is also executed automatically, so that the two environment strings correspond.

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.In rare instances, when the run-time system is maintaining both a Unicode version and a multibyte version of the environment, these two environment versions might not correspond exactly. 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.This is because, although any unique multibyte-character string maps to a unique Unicode string, the mapping from a unique Unicode string to a multibyte-character string is not necessarily unique. Di conseguenza, due stringhe Unicode distinte possono eseguire il mapping della stessa stringa multibyte.Therefore, two distinct Unicode strings might map to the same multibyte string.

Il polling _environ in un contesto Unicode non è necessario quando viene usato il collegamento /MD o /MDd.Polling _environ in a Unicode context is meaningless when /MD or /MDd linkage is used. Per la DLL CRT, il tipo (wide o multibyte) del programma è sconosciuto.For the CRT DLL, the type (wide or multibyte) of the program is unknown. Verrà creato solo il tipo multibyte perché è lo scenario che si presenta più spesso.Only the multibyte type is created because that is the most likely scenario.

Il seguente pseudocodice seguente mostra come ciò può verificarsi.The following pseudo-code illustrates how this can happen.

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 del linguaggio C; piuttosto, sono segnaposti che rappresentano valori letterali stringa dell'ambiente Unicode nella chiamata a _wputenv e stringhe dell'ambiente multibyte nella chiamata a putenv.In the notation used for this example, the character strings are not C string literals; rather, they are placeholders that represent Unicode environment string literals in the _wputenv call and multibyte environment strings in the putenv call. I segnaposto 'x' e 'y' del carattere nelle due stringhe distinte dell'ambiente Unicode non eseguono il mapping in modo univoco ai caratteri nell'MBCS corrente.The character placeholders 'x' and 'y' in the two distinct Unicode environment strings do not map uniquely to characters in the current MBCS. Invece, entrambi eseguono il mapping a qualche carattere MBCS 'z' che è il risultato predefinito del tentativo di conversione delle stringhe.Instead, both map to some MBCS character 'z' that is the default result of the attempt to convert the strings.

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".Thus, in the multibyte environment, the value of "env_var_z" after the first implicit call to putenv would be "string1", but this value would be overwritten on the second implicit call to putenv, when the value of "env_var_z" is set to "string2". Di conseguenza l'ambiente Unicode (in _wenviron) e l'ambiente multibyte (in _environ) differirebbero seguendo questa serie di chiamate.The Unicode environment (in _wenviron) and the multibyte environment (in _environ) would therefore differ following this series of calls.

Vedere ancheSee Also

Global Variables (Variabili globali)Global Variables
getenv, _wgetenv getenv, _wgetenv
getenv_s, _wgetenv_s getenv_s, _wgetenv_s
_putenv, _wputenv _putenv, _wputenv
_putenv_s, _wputenv_s_putenv_s, _wputenv_s