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