getenv、_wgetenvgetenv, _wgetenv

現在の環境から値を取得します。Gets a value from the current environment. これらの関数にはセキュリティが強化されたバージョンがあります。「getenv_s、_wgetenv_s」をご覧ください。More secure versions of these functions are available; see getenv_s, _wgetenv_s.

重要

この API は、Windows ランタイムで実行するアプリケーションでは使用できません。This API cannot be used in applications that execute in the Windows Runtime. 詳細については、「ユニバーサル Windows プラットフォーム アプリでサポートされていない CRT 関数」を参照してください。For more information, see CRT functions not supported in Universal Windows Platform apps.

構文Syntax

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

パラメーターParameters

varnamevarname
環境変数名。Environment variable name.

戻り値Return Value

含む環境テーブル エントリのポインターを返しますvarnameします。Returns a pointer to the environment table entry containing varname. 返されたポインターを使用して環境変数の値を変更することは安全ではありません。It is not safe to modify the value of the environment variable using the returned pointer. 使用して、 _putenv環境変数の値を変更する関数。Use the _putenv function to modify the value of an environment variable. 戻り値はNULL場合varname環境テーブルに含まれていません。The return value is NULL if varname is not found in the environment table.

RemarksRemarks

Getenv関数用の環境変数の一覧を検索するvarnameします。The getenv function searches the list of environment variables for varname. getenv Windows オペレーティング システムで大文字小文字は区別されません。getenv is not case sensitive in the Windows operating system. getenv_putenvグローバル変数が指す環境のコピーを使用して _environ環境にアクセスします。getenv and _putenv use the copy of the environment pointed to by the global variable _environ to access the environment. getenvと環境「セグメント」は、オペレーティング システムによって、プロセスの作成ではなく、ランタイム ライブラリにアクセスできるデータ構造でのみ動作します。getenv operates only on the data structures accessible to the run-time library and not on the environment "segment" created for the process by the operating system. そのため、プログラムを使用する、 envp引数メインまたはwmain無効な情報を取得することがあります。Therefore, programs that use the envp argument to main or wmain may retrieve invalid information.

場合varnameNULL、」の説明に従って、この関数は、無効なパラメーター ハンドラーを呼び出しますパラメーターの検証です。If varname is NULL, this function invokes an invalid parameter handler, as described in Parameter Validation. 実行の継続が許可された場合に、この関数が設定errnoEINVAL返しますNULLします。If execution is allowed to continue, this function sets errno to EINVAL and returns NULL.

_wgetenvのワイド文字バージョンは、 getenv; の引数と戻り値 _wgetenvはワイド文字列です。_wgetenv is a wide-character version of getenv; the argument and return value of _wgetenv are wide-character strings. _Wenvironグローバル変数はワイド文字バージョンの _environします。The _wenviron global variable is a wide-character version of _environ.

(たとえば、SBCS ASCII プログラム) での MBCS プログラムで _wenvironが最初にNULL環境がマルチバイト文字の文字列で構成されるためです。In an MBCS program (for example, in an SBCS ASCII program), _wenviron is initially NULL because the environment is composed of multibyte-character strings. その後、最初の呼び出し _wputenv、または最初の呼び出しで _wgetenv (MBCS) 環境が既に存在する場合、対応するワイド文字列環境が作成され、でし指し示されます _wenvironします。Then, on the first call to _wputenv, or on the first call to _wgetenv if an (MBCS) environment already exists, a corresponding wide-character string environment is created and is then pointed to by _wenviron.

同様に、Unicode (_wmain) プログラム、 _environが最初にNULL環境がワイド文字の文字列で構成されているためです。Similarly in a Unicode (_wmain) program, _environ is initially NULL because the environment is composed of wide-character strings. その後、最初の呼び出し _putenv、または最初の呼び出しでgetenv (Unicode) 環境が既に存在する場合、対応する MBCS 環境が作成され、しを指しています _environします。Then, on the first call to _putenv, or on the first call to getenv if a (Unicode) environment already exists, a corresponding MBCS environment is created and is then pointed to by _environ.

2 つの環境のコピー (MBCS および Unicode) がプログラムに同時に存在する場合、ランタイム システムは、両方のコピーを保持する必要があるため、実行時間が長くなります。When two copies of the environment (MBCS and Unicode) exist simultaneously in a program, the run-time system must maintain both copies, resulting in slower execution time. たとえば、呼び出したとき _putenvへの呼び出し _wputenv 2 つの環境文字列が対応できるように自動的に実行されてもします。For example, whenever you call _putenv, a call to _wputenv is also executed automatically, so that the two environment strings correspond.

注意事項

まれに、ランタイム システムが Unicode 環境とマルチバイト環境の両方を保持している場合、これら 2 つの環境が正確に対応しないことがあります。In rare instances, when the run-time system is maintaining both a Unicode version and a multibyte version of the environment, these two environment versions may not correspond exactly. これは、一意のマルチバイト文字列はすべて一意の Unicode 文字列に対応していますが、一意の Unicode 文字列は必ずしも一意のマルチバイト文字列に対応していないためです。This is because, although any unique multibyte-character string maps to a unique Unicode string, the mapping from a unique Unicode string to a multibyte-character string is not necessarily unique. 詳細については、「_environ、_wenviron」をご覧ください。For more information, see _environ, _wenviron.

注意

_Putenv系関数はスレッド セーフではされません。The _putenv and _getenv families of functions are not thread-safe. _putenv中に文字列ポインターを返すことができます _putenvがランダムにエラーの原因と、文字列を変更します。_getenv could return a string pointer while _putenv is modifying the string, causing random failures. これらの関数の呼び出しが同期されていることを確認する必要があります。Make sure that calls to these functions are synchronized.

汎用テキスト ルーチンのマップGeneric-Text Routine Mappings

TCHAR.H のルーチンTCHAR.H routine _UNICODE および _MBCS が未定義の場合_UNICODE & _MBCS not defined _MBCS が定義されている場合_MBCS defined _UNICODE が定義されている場合_UNICODE defined
_tgetenv_tgetenv getenvgetenv getenvgetenv _wgetenv_wgetenv

確認するかの値を変更する、 TZ環境変数を使用してgetenv_putenv_tzsetに応じて。To check or change the value of the TZ environment variable, use getenv, _putenv and _tzset as necessary. 詳細についてはTZを参照してください_tzset_daylight、timezone、_tznameします。For more information about TZ, see _tzset and _daylight, timezone, and _tzname.

必要条件Requirements

ルーチンによって返される値Routine 必須ヘッダーRequired header
getenvgetenv <stdlib.h><stdlib.h>
_wgetenv_wgetenv <stdlib.h> または <wchar.h><stdlib.h> or <wchar.h>

互換性の詳細については、「 互換性」を参照してください。For additional compatibility information, see Compatibility.

Example

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

関連項目See also

プロセス制御と環境制御Process and Environment Control
_putenv、_wputenv_putenv, _wputenv
環境定数Environmental Constants