getenv, _wgetenv

Obtiene un valor del entorno actual. Hay disponibles versiones más seguras de estas funciones; vea getenv_s, _wgetenv_s.

Importante

Esta API no se puede usar en aplicaciones que se ejecutan en Windows en tiempo de ejecución.Para obtener más información, vea Funciones de CRT no admitidas con /ZW.

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

Parámetros

  • varname
    Nombre de la variable de entorno.

Valor devuelto

Devuelve un puntero a la entrada de la tabla de entornos que contiene varname. No es seguro modificar el valor de la variable de entorno con el puntero devuelto. Use la función _putenv para modificar el valor de una variable de entorno. El valor devuelto es NULL si varname no se encuentra en la tabla de entornos.

Comentarios

La función getenv busca varname en la lista de variables de entorno. getenv no distingue entre mayúsculas y minúsculas en el sistema operativo Windows. getenv y _putenv usan la copia del entorno indicado por la variable global _environ para tener acceso al entorno. getenv solo funciona en las estructuras de datos a las que puede tener acceso la biblioteca en tiempo de ejecución y no en el “segmento” del entorno que el sistema operativo crea para el proceso. En consecuencia, los programas que usan el argumento de envp para main o wmain podrían recuperar información no válida.

Si varname es NULL, esta función invoca un controlador de parámetros no válidos, como se describe en Validación de parámetros. Si la ejecución puede continuar, la función establece errno en EINVAL y devuelve NULL.

_wgetenv es una versión con caracteres anchos de getenv; el argumento y el valor devuelto de _wgetenv son cadenas de caracteres anchos. La variable global _wenviron es una versión con caracteres anchos de _environ.

En un programa de MBCS (por ejemplo, en un programa ASCII de SBCS), _wenviron es inicialmente NULL porque el entorno está formado por cadenas de caracteres multibyte. Después, en la primera llamada a _wputenv, o en la primera llamada a _wgetenv si ya existe un entorno (MBCS), se crea un entorno de cadenas de caracteres anchos correspondiente, al que señala _wenviron.

De la misma forma, en un programa de Unicode (_wmain), _environ es inicialmente NULL porque el entorno está formado por cadenas de caracteres anchos. Después, en la primera llamada a _putenv, o en la primera llamada a getenv si ya existe un entorno (Unicode), se crea un entorno de MBCS correspondiente, al que señala _environ.

Si dos copias del entorno (MBCS y Unicode) existen simultáneamente en un programa, el sistema en tiempo de ejecución debe mantener las dos copias, lo que ralentiza el tiempo de ejecución. Por ejemplo, cada vez que se llame a _putenv, se ejecuta automáticamente una llamada a _wputenv, de forma que se correspondan las dos cadenas de entorno.

Advertencia

En raras ocasiones, cuando el sistema en tiempo de ejecución mantiene una versión Unicode y una versión multibyte del entorno, las dos versiones del entorno podrían no corresponderse exactamente.La razón es que, aunque cualquier cadena de caracteres multibyte se asigna a una cadena de Unicode única, la asignación de una cadena de Unicode única a una cadena de caracteres multibyte no es necesariamente única.Para obtener más información, vea _environ, _wenviron.

Nota

Los grupos de funciones de _putenv y _getenv no son seguros para subprocesos._getenv podría devolver un puntero de cadena mientras _putenv modifica la cadena, y se generarían errores aleatorios.Asegúrese de que las llamadas a estas funciones están sincronizadas.

Asignaciones de rutina de texto genérico

Rutina TCHAR.H

_UNICODE y _MBCS no definidos

_MBCS definido

_UNICODE definido

_tgetenv

getenv

getenv

_wgetenv

Para comprobar o cambiar el valor de la variable de entorno TZ, use getenv, _putenv y _tzset según sea necesario. Para obtener más información sobre TZ, vea _tzset y _daylight, timezone y _tzname.

Requisitos

Rutina

Encabezado necesario

getenv

<stdlib.h>

_wgetenv

<stdlib.h> o <wchar.h>

Para obtener más información sobre compatibilidad, vea Compatibilidad.

Ejemplo

// 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 );
}
  

Equivalente en .NET Framework

System::Environment::GetEnvironmentVariable

Vea también

Referencia

Control de proceso y de entorno

_putenv, _wputenv

Constantes de entorno