Compartir a través de


_environ, _wenviron

La variable de _environ es un puntero a una matriz de punteros a cadenas de multibyte- carácter que constituyen el entorno de proceso.Esta variable global está desusado para las versiones funcionales más seguras getenv_s, _wgetenv_s y _putenv_s, _wputenv_s, que se debe usar en lugar de la variable global._environ se declara en Stdlib.h.

Nota importanteImportante

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

extern char **_environ;

Comentarios

En un programa que utiliza la función de main, _environ se inicializa en el inicio del programa según los valores tomados del entorno del sistema operativo.El entorno consta de una o más entradas de formulario

ENVVARNAME=string

getenv_s y putenv_s utilizan la variable de _environ para obtener acceso y modificar a la tabla del entorno.Cuando _putenv se denomina para agregar o eliminar la configuración de entorno, la tabla de entorno cambia de tamaño.La ubicación en memoria pueden cambiar, dependiendo de los requisitos de memoria del programa.El valor de _environ se ajusta automáticamente en consecuencia.

La variable de _wenviron, declarada en Stdlib.h en:

extern wchar_t **_wenviron;

es una versión con caracteres anchos de _environ.En un programa que utiliza la función de wmain, _wenviron se inicializa en el inicio del programa según los valores tomados del entorno del sistema operativo.

En un programa que utiliza main, _wenviron inicialmente es NULL porque el entorno se compone de las cadenas de multibyte- carácter.En la primera llamada a _wgetenv o a _wputenv, un entorno correspondiente de cadena de caracteres es creado y indicada por _wenviron.

De igual forma, en un programa que utiliza wmain, _environ inicialmente es NULL porque el entorno se compone de las cadenas de caracteres.En la primera llamada a _getenv o a _putenv, un entorno correspondiente de la cadena de multibyte- carácter es creado y indicada por _environ.

Cuando dos copias del entorno (MBCS y Unicode) simultáneamente en un programa, el sistema de runtime debe mantener ambas copias, lo que da como resultado un runtime más lento.Por ejemplo, cada vez que se llame a _putenv, una llamada a _wputenv también se ejecuta automáticamente, de modo que las dos cadenas de entorno corresponden.

Nota de precauciónPrecaución

Son raros, cuando el sistema en tiempo de ejecución mantiene una versión Unicode y una versión multibyte de entorno, estas versiones de dos entornos no puede corresponder exactamente.Esto se debe a que, aunque ninguna mapas única de la cadena de multibyte- carácter en una cadena Unicode única, la asignación de una cadena Unicode única de una cadena de multibyte- carácter no es necesariamente única.Por consiguiente, dos cadenas Unicode distintas podrían asignarse a la misma cadena multibyte.

El sondeo _environ en un contexto de Unicode no tiene sentido cuando se utiliza /MD o vinculación de /MDd.Para el archivo DLL de CRT, el tipo (de ancho o multibyte) del programa es desconocido.Solo se crea el tipo multibyte porque es el escenario más probable.

El pseudo- código siguiente muestra cómo esto puede producirse.

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")

En la notación utilizada para este ejemplo, las cadenas de caracteres no son literales de cadena de C; más bien, son los marcadores que representan literales de cadena del entorno de Unicode en la llamada de _wputenv y cadenas de entorno multibyte en la llamada de putenv.Los marcadores 'x' y 'y' de carácter en las dos cadenas distintas del entorno de Unicode no asignan únicamente a los caracteres de la actual MBCS.En su lugar, el mapa a alguna de caracteres MBCS 'z' que es el resultado predeterminado del intento de convertir cadenas.

Así, en el entorno multibyte, el valor “env_var_z” después de la primera llamada implícita a putenv fuera “string1”, pero este valor se sobrescriba en la segunda llamada implícita a putenv, cuando el valor de “env_var_z” se establece en “string2”.El entorno de Unicode (en _wenviron) y el entorno multibyte (en _environ) por consiguiente diferenciarían siguiendo la ejecución de llamadas.

Vea también

Referencia

Variables globales

getenv, _wgetenv

getenv_s, _wgetenv_s

_putenv, _wputenv

_putenv_s, _wputenv_s