Compartilhar via


_environ, _wenviron

A variável de _environ é um ponteiro para uma matriz dos ponteiros em cadeias de caracteres de multibyte- caractere que constituem o ambiente de processamento. Essa variável global foi substituído para o mais seguro getenv_s, _wgetenv_s versões funcionais e _putenv_s, _wputenv_s, que devem ser usados no lugar da variável global. _environ for declarado em Stdlib.h.

Importante

Esta API não pode ser usada em aplicativos que executam no Tempo de Execução do Windows.Para obter mais informações, consulte Funções CRT sem suporte pelo /ZW.

extern char **_environ;

Comentários

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

ENVVARNAME=string

getenv_s e putenv_s usam a variável de _environ para acessar e alterar a tabela de ambiente. Quando _putenv é chamado para adicionar ou excluir configurações de ambiente, o tamanho das alterações da tabela de ambiente. O local na memória também pode alterar, dependendo dos requisitos de memória do programa. O valor de _environ é definido automaticamente de acordo.

A variável de _wenviron , declarado em Stdlib.h como:

extern wchar_t **_wenviron;

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

Em um programa que usa main, _wenviron é inicialmente NULL porque o ambiente é composto de cadeias de caracteres de multibyte- caractere. Na primeira chamada a _wgetenv ou a _wputenv, um ambiente correspondente da cadeia de caracteres de ampla caractere é criado e apontado por _wenviron.

Da mesma forma, em um programa que usa wmain, _environ é inicialmente NULL porque o ambiente é composto de cadeias de caracteres de ampla caractere. Na primeira chamada a _getenv ou a _putenv, um ambiente correspondente da cadeia de caracteres de multibyte- caractere é criado e apontado por _environ.

Quando duas cópias de ambiente (MBCS e Unicode) existem simultaneamente em um programa, o sistema de tempo de execução deve manter as duas cópias, resultando em tempos de execução mais lentos. Por exemplo, sempre que chama _putenv, uma chamada a _wputenv também é executado automaticamente, de modo que as duas cadeias de caracteres de ambiente correspondam.

Aviso

Em poucas instâncias, quando o sistema de tempo de execução está mantendo uma versão Unicode e uma versão multibyte de ambiente, essas versões de dois ambientes podem não corresponder exatamente.Isso ocorre porque, embora nenhum mapas exclusivos da cadeia de caracteres de multibyte- caracteres em uma cadeia de caracteres exclusiva Unicode, o mapeamento de uma cadeia de caracteres Unicode exclusivo em uma cadeia de caracteres de multibyte- caractere não são necessariamente exclusivos.Consequentemente, duas cadeias de caracteres distintas Unicode podem mapear para a mesma cadeia de caracteres de vários bytes.

A sondagem _environ em um contexto Unicode não tem sentido quando /MD ou o vínculo de /MDd são usados. Para a DLL de CRT, o tipo (largura ou vários bytes) do programa é desconhecido. Somente o tipo de multibyte é criado porque esse é 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, as cadeias de caracteres não são literais de cadeia de caracteres C; em vez disso, são espaços reservados que representam cadeias de caracteres literais de ambiente Unicode na chamada de _wputenv e nas cadeias de caracteres de ambiente multibyte na chamada de putenv . Os espaços reservados 'x' e 'y' de caractere entre duas cadeias de caracteres distintas de ambiente Unicode não mapeiam exclusivamente aos caracteres em MBCS atual. Em vez disso, ambos são mapeados para qualquer MBCS o caractere 'z' que é o resultado padrão da tentativa de converter cadeias de caracteres.

Assim, no ambiente de multibyte, o valor “env_var_z” depois que a primeira chamada implícito a putenv é “string1”, mas esse valor será substituído na segunda chamada implícito a putenv, quando o valor de “env_var_z” é definido como “string2”. O ambiente de Unicode (em _wenviron) e o ambiente de vários bytes (em _environ) difeririam como consequência seguindo esta série de chamadas.

Consulte também

Referência

Variáveis globais

getenv, _wgetenv

getenv_s, _wgetenv_s

_putenv, _wputenv

_putenv_s, _wputenv_s