getenv, _wgetenv

Obtém um valor do ambiente atual. Versões mais seguras dessas funções estão disponíveis; confira getenv_s, _wgetenv_s.

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

char *getenv(
   const char *varname
);
wchar_t *_wgetenv(
   const wchar_t *varname
);

Parâmetros

varname
Nome da variável de ambiente.

Retornar valor

Retorna um ponteiro para a entrada da tabela de ambiente que contém varname. Não é seguro modificar o valor da variável de ambiente usando o ponteiro retornado. Use a função _putenv para modificar o valor de uma variável de ambiente. O valor de retorno é NULL se varname não for encontrado na tabela de ambiente.

Comentários

A função getenv pesquisa varname na lista de variáveis de ambiente. getenv não diferencia maiúsculas de minúsculas no sistema operacional Windows. getenv e _putenv usam a cópia do ambiente apontado pela variável global _environ para acessar o ambiente. getenv funciona somente nas estruturas de dados acessíveis para a biblioteca em tempo de execução e não no "segmento" de ambiente criado para o processo pelo sistema operacional. Portanto, programas que usam o argumento envp para main ou wmain podem recuperar informações inválidas.

Se varname for NULL, essa função invoca um manipulador de parâmetros inválido, conforme descrito em Validação de parâmetro. Se a execução puder continuar, essa função definirá errno para EINVAL e retornará NULL.

_wgetenv é uma versão de caractere largo de getenv; o argumento e o valor retornado de _wgetenv são cadeias de caracteres largos. A variável global _wenviron é uma versão de caractere largo de _environ.

Em um programa MBCS (por exemplo, em um programa ASCII SBCS), _wenviron é inicialmente NULL porque o ambiente é composto por cadeias de caracteres multibyte. Então, na primeira chamada para _wputenv ou na primeira chamada para _wgetenv se um ambiente (MBCS) já existir, um ambiente correspondente de cadeia de caracteres largos será criado e apontado por _wenviron.

De forma semelhante, em um programa Unicode (_wmain), _environ é inicialmente NULL porque o ambiente é composto por cadeias de caracteres largos. Então, na primeira chamada para _putenv ou na primeira chamada para getenv se um ambiente (Unicode) já existir, um ambiente MBCS correspondente será criado e apontado por _environ.

Quando duas cópias do ambiente (MBCS e Unicode) existirem simultaneamente em um programa, o sistema do tempo de execução deverá mainmanter 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 mainmanté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. Para obter mais informações, consulte _environe _wenviron.

Observação

As famílias de funções _putenv e _getenv não são thread-safe. _getenv poderia retornar um ponteiro de cadeia de caracteres enquanto _putenv está modificando a cadeia de caracteres, causando falhas aleatórias. As chamadas para essas funções devem estar sincronizadas.

Por padrão, o estado global dessa função tem como escopo o aplicativo. Para alterar esse comportamento, consulte Estado global na CRT.

Mapeamentos de rotina de texto genérico

Rotina TCHAR.H _UNICODE e _MBCS não definidos _MBCS definido _UNICODE definido
_tgetenv getenv getenv _wgetenv

Para verificar ou alterar o valor da variável de ambiente TZ, use getenv, _putenv e _tzset, conforme necessário. Para obter mais informações sobre TZ, confira _tzset e _daylight, timezone e _tzname.

Requisitos

Rotina Cabeçalho necessário
getenv <stdlib.h>
_wgetenv <stdlib.h> ou <wchar.h>

Para obter informações sobre compatibilidade, consulte Compatibilidade.

Exemplo

// crt_getenv.c
// compile with: /W3
// This program uses getenv to retrieve
// the LIB environment variable and then uses
// _putenv to change it to a new value.

#include <stdlib.h>
#include <stdio.h>

int main( void )
{
   char *libvar;

   // Get the value of the LIB environment variable.
   libvar = getenv( "LIB" ); // C4996
   // Note: getenv is deprecated; consider using getenv_s instead

   if( libvar != NULL )
      printf( "Original LIB variable is: %s\n", libvar );

   // Attempt to change path. Note that this only affects the environment
   // variable of the current process. The command processor's
   // environment is not changed.
   _putenv( "LIB=c:\\mylib;c:\\yourlib" ); // C4996
   // Note: _putenv is deprecated; consider using putenv_s instead

   // Get new value.
   libvar = getenv( "LIB" ); // C4996

   if( libvar != NULL )
      printf( "New LIB variable is: %s\n", libvar );
}
Original LIB variable is: C:\progra~1\devstu~1\vc\lib
New LIB variable is: c:\mylib;c:\yourlib

Confira também

Controle de processos e ambientes
_putenv, _wputenv
Constantes ambientais