Compartilhar via


_environ, _wenviron

The _environ variável é um ponteiro para uma matriz de ponteiros para seqüências de caractere de multibyte que constituem o ambiente de processo. Essa variável global foi substituída em Visual C++ 2005 para as versões mais seguras funcionais getenv_s, _wgetenv_s e _putenv_s, _wputenv_s, devem ser usados no lugar da variável global. _environ é declarada no Stdlib.h.

extern char **_environ;

Comentários

Em um programa que usa o main função, _environ é inicializado na inicialização do programa de acordo com a configurações retirada do ambiente do sistema operacional. O ambiente consiste em uma ou mais entradas do formulário

ENVVARNAME=string

getenv_s e putenv_s Use o _environ variável para acessar e modificar a tabela de ambiente. Quando _putenv chamado para adicionar ou excluir configurações de ambiente, a tabela de ambiente muda de dimensionar. Seu local na memória também pode ser alteradas, dependendo dos requisitos de memória do programa.O valor de _environ é automaticamente ajustada adequadamente.

The _wenviron variável, declarado em Stdlib.h sistema autônomo:

extern wchar_t **_wenviron;

é uma versão de caractere largo de _environ. Em um programa que usa o wmain função, _wenviron é inicializado na inicialização do programa de acordo com a configurações retirada do ambiente do sistema operacional.

Em um programa que usa main, _wenviron é inicialmente NULL porque o ambiente é composto de seqüências de caractere de multibyte. Na primeira telefonar _wgetenv ou _wputenv, um ambiente de seqüência de caractere largos correspondente é criado e é apontado por _wenviron.

Da mesma forma, em um programa que usa wmain, _environ é inicialmente NULL porque o ambiente é composto de seqüências de caractere largos. Na primeira telefonar _getenv ou _putenv, um ambiente de seqüência de caractere multibyte correspondente é criado e é apontado por _environ.

Quando duas cópias do ambiente (MBCS e Unicode) de existem simultaneamente em um programa, o em time de execução sistema deve manter as duas cópias, resultando em menor time de execução.Por exemplo, sempre que você chamar _putenv, uma telefonar para _wputenv também é executada automaticamente, para que as seqüências de caracteres de dois ambiente correspondem.

Cuidado:

Em raras ocasiões, quando o sistema de time de execução é manter uma versão Unicode e uma versão multibyte do ambiente, essas versões do duas ambiente podem não corresponder exatamente.Isso ocorre porque, embora qualquer seqüência de caractere de multibyte exclusiva mapeia para uma única seqüência de caractere Unicode, o mapeamento de uma seqüência de caractere Unicode exclusivo para uma seqüência de caractere multibyte não é necessariamente exclusivo.Portanto, talvez duas seqüências Unicode distintas MAP à seqüência de caracteres multibyte mesma.

De sondagem_environ em um Unicode contexto é inútil quando /MD or /MDd ligação é usada. Para a DLL do CRT, o tipo (amplo ou multibyte) do programa é desconhecido.Somente o tipo multibyte é criado porque este é o cenário mais provável.

O pseudocódigo a seguir ilustra como isso pode acontecer.

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

Na notação usada para este exemplo, seqüências de caractere não são literais de seqüências de caractere C; em vez disso, eles são espaços reservados que representam os literais da cadeia de caractere Unicode ambiente no _wputenv strings de ambiente telefonar e multibyte na putenv Chame. x'e'y' no Unicode distintas duas cadeias de caracteres de ambiente não mapeiam exclusivamente aos caracteres MBCS corrente. Em vez disso, ambos mapeiam para alguns caractere MBCS ' z' isto é o resultado padrão da tentativa de converter as cadeias de caractere.

Assim, no ambiente multibyte, o valor de"env_var_z"após a primeira telefonar implícita para putenvseria"string1", mas esse valor deve ser substituído na segunda telefonar implícita para putenvQuando o valor de "env_var_z"é definido como"string2". O ambiente de Unicode (_wenviron) e o ambiente de vários bytes (em _environ), portanto, seria diferem seguindo essa série de chamadas.

Consulte também

Referência

Variáveis global

GETENV, _wgetenv

getenv_s, _wgetenv_s

_putenv, _wputenv

_putenv_s, _wputenv_s