getenv, _wgetenv

從目前的環境取得值。 這些函式有更安全的版本可供使用;請參閱 getenv_s_wgetenv_s

重要

這個 API 不能用於在 Windows 執行階段中執行的應用程式。 如需詳細資訊,請參閱 CRT functions not supported in Universal Windows Platform apps (通用 Windows 平台應用程式中不支援的 CRT 函式)。

語法

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

參數

varname
環境變數名稱。

傳回值

將指標傳回至包含 varname 的環境資料表項目。 使用傳回的指標修改環境變數的值並不安全。 使用 _putenv 函式修改環境變數的值。 如果 varname 環境資料表中找不到 ,則傳回值為 NULL

備註

getenv 函式會在環境變數清單中搜尋 varnamegetenv 在 Windows 作業系統中不區分大小寫。 getenv_putenv 使用全域變數 _environ 所指出的環境複本來存取環境。 getenv 只會在執行階段程式庫可以存取的資料結構上運作,而不會在作業系統為此處理序所建立的環境「區段」上運作。 因此,使用 envp 引數的程式 mainwmain 可能會擷取不正確資訊。

如果 varnameNULL ,則此函式會叫用不正確參數處理常式,如參數驗證 中所述 。 若允許繼續執行,此函式會將 errno 設為 EINVAL,並傳回 NULL

_wgetenvgetenv 的寬字元版本,_wgetenv 的引數與傳回值是寬字元字串。 _wenviron 全域變數是寬字元版本的 _environ

在 MBCS 程式中 (例如,在 SBCS ASCII 程式中),_wenviron 一開始是 NULL,因為此環境由多位元組字元字串所組成。 然後,在第一次呼叫 _wputenv 時,或在第一次呼叫 _wgetenv 時,如果 (MBCS) 環境已經存在,則會建立對應的寬字元字串環境,然後由 _wenviron 指向該變數。

同樣地,在 Unicode (_wmain) 程式中,_environ 一開始是 NULL,因為此環境由寬字元字串所組成。 然後,在第一次呼叫 _putenv 時,或在第一次呼叫 getenv 時,如果 (Unicode) 環境已經存在,則會建立對應的 MBCS 環境,然後再由 _environ 指向該變數。

當程式中同時存在兩個環境複本(MBCS 和 Unicode)時,執行時間系統必須 main 玷污這兩個複本,導致執行時間變慢。 例如,每當您呼叫 _putenv 時,也會自動執行對 _wputenv 的呼叫,使得這兩個環境字串對應。

警告

在罕見的情況下,當執行時間系統 main 同時玷污 Unicode 版本和環境的多位元組版本時,這兩個環境版本可能不會完全對應。 這是因為雖然任何唯一的多位元組字元字串會對應到唯一的 Unicode 字串,但從唯一的 Unicode 字串對應到多位元組字元字串並不一定唯一。 如需詳細資訊,請參閱 _environ_wenviron

注意

_putenv_getenv 系列的函式不是安全執行緒。 _putenv 正在修改字串時,_getenv 可能會傳回字串指標,因而導致隨機失敗。 確定這些函式的呼叫已同步。

根據預設,此函式的全域狀態會限定于應用程式。 若要變更此行為,請參閱 CRT 中的全域狀態。

泛型文字常式對應

TCHAR.H 常規 _UNICODE_MBCS 未定義 _MBCS 定義 _UNICODE 定義
_tgetenv getenv getenv _wgetenv

若要檢查或變更 TZ 環境變數的值,請視需要使用 getenv_putenv_tzset。 如需 的詳細資訊 TZ ,請參閱 _tzset_daylighttimezone_tzname

需求

常式 必要的標頭
getenv <stdlib.h>
_wgetenv <stdlib.h><wchar.h>

如需相容性詳細資訊,請參閱相容性

範例

// 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

另請參閱

進程和環境控制
_putenv, _wputenv
環境常數