getenv, _wgetenvgetenv, _wgetenv

Ottiene un valore dall'ambiente corrente.Gets a value from the current environment. Sono disponibili versioni più sicure di queste funzioni. Vedere getenv_s, _wgetenv_s.More secure versions of these functions are available; see getenv_s, _wgetenv_s.

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

char *getenv(   
   const char *varname   
);  
wchar_t *_wgetenv(   
   const wchar_t *varname   
);  

ParametriParameters

varname
Nome della variabile di ambiente.Environment variable name.

Valore restituitoReturn Value

Restituisce un puntatore alla voce della tabella dell'ambiente contenente varname.Returns a pointer to the environment table entry containing varname. Non è sicuro modificare il valore della variabile di ambiente utilizzando il puntatore restituito.It is not safe to modify the value of the environment variable using the returned pointer. Per modificare il valore di una variabile di ambiente, usare la funzione _putenv.Use the _putenv function to modify the value of an environment variable. Il valore restituito è NULL se varname non viene trovato nella tabella dell'ambiente.The return value is NULL if varname is not found in the environment table.

NoteRemarks

La funzione getenv cerca varname nell'elenco delle variabili di ambiente.The getenv function searches the list of environment variables for varname. Per getenv non viene rilevata la distinzione tra maiuscole e minuscole nel sistema operativo Windows.getenv is not case sensitive in the Windows operating system. getenv e _putenv usano la copia dell'ambiente puntato dalla variabile globale _environ per accedere all'ambiente.getenv and _putenv use the copy of the environment pointed to by the global variable _environ to access the environment. 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.getenv operates only on the data structures accessible to the run-time library and not on the environment "segment" created for the process by the operating system. Di conseguenza, i programmi che usano l'argomento envp per main o wmain possono recuperare informazioni non valide.Therefore, programs that use the envp argument to main or wmain may retrieve invalid information.

Se varname è NULL, questa funzione richiama il gestore di parametri non validi, come descritto in Convalida dei parametri.If varname is NULL, this function invokes an invalid parameter handler, as described in Parameter Validation. Se l'esecuzione può continuare, la funzione imposta errno suEINVAL e restituisce NULL.If execution is allowed to continue, this function sets errno to EINVAL and returns NULL.

_wgetenv è una versione a caratteri wide di getenv. L'argomento e il valore restituito di _wgetenv sono stringhe a caratteri wide._wgetenv is a wide-character version of getenv; the argument and return value of _wgetenv are wide-character strings. La variabile globale _wenviron è una versione a caratteri wide di _environ.The _wenviron global variable is a wide-character version of _environ.

In un programma MBCS (ad esempio, in un programma ASCII SBCS), _wenviron inizialmente è NULL perché l'ambiente è costituito da stringhe di caratteri multibyte.In an MBCS program (for example, in an SBCS ASCII program), _wenviron is initially NULL because the environment is composed of multibyte-character strings. 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.Then, on the first call to _wputenv, or on the first call to _wgetenv if an (MBCS) environment already exists, a corresponding wide-character string environment is created and is then pointed to by _wenviron.

Allo stesso modo, in un programma Unicode (_wmain), _environ inizialmente è NULL perché l'ambiente è costituito da stringhe di caratteri wide.Similarly in a Unicode (_wmain) program, _environ is initially NULL because the environment is composed of wide-character strings. 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 viene puntato a _environ.Then, on the first call to _putenv, or on the first call to getenv if a (Unicode) environment already exists, a corresponding MBCS environment is created and is then 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 runtime mantiene 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 may 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. Per altre informazioni, vedere _environ, _wenviron.For more information, see _environ, _wenviron.

Nota

Le famiglie di funzioni _putenv e _getenv non sono thread-safe.The _putenv and _getenv families of functions are not thread-safe. _getenv potrebbe restituire un puntatore di stringa mentre _putenv sta modificando la stringa, causando errori casuali._getenv could return a string pointer while _putenv is modifying the string, causing random failures. Assicurarsi che le chiamate alle funzioni siano sincronizzate.Make sure that calls to these functions are synchronized.

Mapping di routine di testo genericoGeneric-Text Routine Mappings

Routine TCHAR.HTCHAR.H routine _UNICODE e _MBCS non definiti_UNICODE & _MBCS not defined _MBCS definito_MBCS defined _UNICODE definito_UNICODE defined
_tgetenv getenv getenv _wgetenv

Per controllare o modificare il valore della variabile di ambiente TZ, utilizzare getenv, _putenv e _tzset, in base alle esigenze.To check or change the value of the TZ environment variable, use getenv, _putenv and _tzset as necessary. Per altre informazioni su TZ, vedere _tzset e _daylight, timezone e _tzname.For more information about TZ, see _tzset and _daylight, timezone, and _tzname.

RequisitiRequirements

RoutineRoutine Intestazione obbligatoriaRequired header
getenv <stdlib.h><stdlib.h>
_wgetenv <stdlib.h> or <wchar.h><stdlib.h> or <wchar.h>

Per altre informazioni sulla compatibilità, vedere Compatibilità.For additional compatibility information, see Compatibility.

EsempioExample

// 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  

Vedere ancheSee Also

Controllo processo e ambiente Process and Environment Control
_putenv, _wputenv _putenv, _wputenv
Costanti di ambienteEnvironmental Constants