Partilhar via


_environ, _wenviron

A variável _environ é um ponteiro para uma matriz de ponteiros para as sequências de caracteres multibyte que constituem o ambiente do processo. Essa variável global foi preterida para as versões funcionais mais seguras e_putenv_s_wgetenv_s ,_wputenv_s , que deve ser usada no lugar da variável global.getenv_s _environ é declarado em Stdlib.h.

Importante

Esta API não pode ser usada em aplicativos executados no Windows Runtime. Para obter mais informações, confira Funções do CRT sem suporte em aplicativos da Plataforma Universal do Windows.

Sintaxe

extern char **_environ;

Comentários

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

ENVVARNAME =string

getenv_se putenv_s usam a variável _environ 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 tamanho. Seu local na memória também pode mudar, dependendo dos requisitos de memória do programa. O valor de _environ será automaticamente ajustado.

A variável _wenviron declarada em Stdlib.h como:

extern wchar_t **_wenviron;

é uma versão de caractere largo de _environ. Em um programa que usa a wmain função _wenviron inicializados na inicialização do programa de acordo com as obtidas do ambiente do sistema operacional.

Em um programa que usa main, _wenviron é inicialmente NULL porque o ambiente é composto de cadeias de caracteres multibyte. Na primeira chamada para _wgetenv ou _wputenv, um ambiente de sequências de caracteres largos correspondente é criada e é apontada pelo _wenviron.

De forma semelhante, em um programa que use wmain, _environ é inicialmente NULL porque o ambiente é composto por cadeias de caracteres largos. Na primeira chamada para _getenv ou _putenv, um ambiente de cadeia de caracteres multibyte correspondente é criado e é apontado pelo _environ.

Quando duas cópias do ambiente (MBCS e Unicode) existirem simultaneamente em um programa, o sistema de tempo de execução deverá manter as duas cópias, fazendo com que o tempo de execução fique mais lento. Por exemplo, sempre que você chama _putenv, uma chamada para _wputenv também é executada automaticamente para que as duas cadeias de caracteres de ambiente correspondam.

Cuidado

Em casos raros, quando o sistema de tempo de execução mantém uma versão Unicode e uma versão multibyte do ambiente, as duas versões de ambiente podem não corresponder exatamente. Isso acontece porque, embora qualquer cadeia de caracteres multibyte exclusiva seja mapeada para uma cadeia de caracteres Unicode exclusiva, o mapeamento de uma cadeia de caracteres Unicode exclusiva para uma cadeia de caracteres multibyte não é necessariamente exclusivo. Portanto, duas cadeias de caracteres distintas do Unicode podem ser mapeadas para a mesma cadeia de caracteres multibyte.

A sondagem _environ em um contexto de Unicode é insignificante quando uma ligação /MD ou /MDd é usada. Para a DLL do CRT, o tipo (multibyte ou largo) do programa é desconhecido. Somente o tipo multibyte é criado porque esse é o cenário mais provável.

O pseudocódigo a seguir ilustra como essa criação 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, eles são espaços reservados que representam literais de cadeia de caracteres de ambiente Unicode na _wputenv chamada e cadeias de caracteres de ambiente multibyte na putenv chamada. Os espaços reservados de caractere 'x' e 'y' nas duas cadeias de caracteres de ambiente Unicode distintas não são mapeados exclusivamente para caracteres no MBCS atual. Em vez disso, são mapeados para alguns caracteres MBCS 'z' que é o resultado padrão de tentativa de converter as cadeias de caracteres.

Assim, no ambiente de vários bytes, o valor de "env_var_z" após a primeira chamada implícita para putenv seria "string1", mas esse valor será substituído na segunda chamada implícita 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) seria diferente, portanto, seguindo essa série de chamadas.

Confira também

Variáveis globais
getenv, _wgetenv
getenv_s, _wgetenv_s
_putenv, _wputenv
_putenv_s, _wputenv_s