Partilhar via


_environ, _wenviron

A variável de _environ é um ponteiro para um array de ponteiros para cadeias de caracteres de multibyte- caractere que constituem o ambiente do processo.Esta variável global foi substituído para o e versões mais seguros getenv_s, _wgetenv_s e _putenv_s, _wputenv_s, que devem ser usados no lugar de variável global._environ é declarado em Stdlib.h.

Observação importanteImportante

Este API não pode ser usado em aplicativos executados em Tempo de Execução do Windows.Para obter mais informações, consulte Funções de CRT não suportadas com /ZW.

extern char **_environ;

Comentários

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

ENVVARNAME=string

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

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

extern wchar_t **_wenviron;

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

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

Da mesma forma, em um programa que usa wmain, _environ é inicialmente NULL porque o ambiente é composta de cadeias de caracteres de largo- 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 um tempo de execução mais lentos.Por exemplo, sempre que você chama _putenv, uma chamada a _wputenv é executado também automaticamente, de modo que as duas cadeias de caracteres de ambiente coincidam.

Observação de cuidadoCuidado

Em instâncias raras, quando o sistema de tempo de execução está mantendo uma versão Unicode e uma versão de multibyte de ambiente, essas versões de dois ambientes podem não corresponder exatamente.Isso ocorre porque, embora os mapas exclusivos de cadeia de caracteres de multibyte- caracteres em uma cadeia de caracteres exclusiva Unicode, o mapeamento de uma cadeia de caracteres exclusiva Unicode para uma cadeia de caracteres de multibyte- caractere não são necessariamente exclusivos.Como consequência, duas cadeias de caracteres Unicode distintas pode mapear para a mesma cadeia de caracteres de multibyte.

Eleição _environ em um contexto Unicode é sem-sentido quando /MD ou ligação do /MDd são usados.Para a DLL de CRT, o tipo (de largura ou multibyte) do programa é conhecido.Somente o tipo de multibyte é criado porque é o cenário mais provável.

O pseudo-código a seguir ilustra como isto 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 esse 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 chamada de _wputenv e cadeias de caracteres de ambiente de multibyte na chamada de putenv .Os espaços reservados 'x' e 'y' de caracteres nas duas cadeias de caracteres de ambiente distintas Unicode não mapeiam exclusivamente para caracteres na atual MBCS.Em vez disso, ambos mapeiam para qualquer MBCS o caractere 'z' que é o resultado padrão da tentativa de converter cadeias de caracteres.

Assim, o ambiente de multibyte, o valor de “env_var_z” após a primeira chamada implícita para putenv seria “string1”, mas esse valor é substituído na segunda chamada implícita para putenv, quando o valor de “env_var_z” é definido como “string2”.O ambiente Unicode (em _wenviron) e o ambiente de multibyte (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