_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.

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.

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.

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

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