_dupenv_s、_wdupenv_s
現在の環境から値を取得します。
重要
この API は、Windows ランタイムで実行するアプリケーションでは使用できません。詳細については、「/ZW でサポートされない CRT 関数」を参照してください。
errno_t _dupenv_s( char **buffer, size_t *numberOfElements, const char *varname ); errno_t _wdupenv_s( wchar_t **buffer, size_t *numberOfElements, const wchar_t *varname );
パラメーター
buffer
変数の値を格納するバッファー。numberOfElements
buffer のサイズ。varname
環境変数名。
戻り値
正常終了した場合は 0 を返します。失敗した場合はエラー コードを返します。
これらの関数は、パラメーターを検証します。buffer または varname が NULL の場合、「パラメーターの検証」に説明されているように、無効なパラメーター ハンドラーが呼び出されます。 実行の継続が許可された場合、この関数は errno を EINVAL に設定し、EINVAL を返します。
十分なメモリを割り当てられない場合、これらの関数は buffer を NULL に、numberOfElements を 0 に設定し、ENOMEM を返します。
解説
_dupenv_s 関数は、環境変数のリストから varname を検索します。 変数が見つかると、_dupenv_s はバッファーを割り当てて変数の値をバッファーにコピーします。 バッファーのアドレスと長さが buffer および numberOfElements で返されます。 バッファー自体を割り当てる点で、_dupenv_s 関数は getenv_s、_wgetenv_s よりも便利な代替関数として使用できます。
注意
free の呼び出しによるメモリの解放は、呼び出し元プログラムが行います。
変数が見つからない場合は、buffer が NULL に、numberOfElements が 0 に設定され、戻り値が 0 になります。これは、この状況がエラー状況と見なされないためです。
バッファーのサイズを考慮しない場合は、numberOfElements に NULL を渡すことができます。
Windows オペレーティング システムでは、_dupenv_s 関数は大文字と小文字を区別しません。 _dupenv_s 関数は、_environ グローバル変数が指す環境のコピーを使用して環境にアクセスします。 _environ については、「getenv_s、_wgetenv_s」の「解説」を参照してください。
buffer の値は、環境変数の値のコピーです。この値を変更しても環境には影響しません。 環境変数の値を変更するには、_putenv_s、_wputenv_s 関数を使用します。
_wdupenv_s は _dupenv_s のワイド文字バージョンで、_wdupenv_s の引数はワイド文字列です。 _wenviron グローバル変数は _environ と同じですが、ワイド文字を扱えるという点で異なっています。 _wenviron の詳細については、「getenv_s、_wgetenv_s」の「解説」を参照してください。
汎用テキスト ルーチンのマップ
TCHAR.H のルーチン |
_UNICODE および _MBCS が未定義の場合 |
_MBCS が定義されている場合 |
_UNICODE が定義されている場合 |
---|---|---|---|
_tdupenv_s |
_dupenv_s |
_dupenv_s |
_wdupenv_s |
必要条件
ルーチン |
必須ヘッダー |
---|---|
_dupenv_s |
<stdlib.h> |
_wdupenv_s |
<stdlib.h> または <wchar.h> |
互換性の詳細については、「互換性」を参照してください。
使用例
// crt_dupenv_s.c
#include <stdlib.h>
int main( void )
{
char *pValue;
size_t len;
errno_t err = _dupenv_s( &pValue, &len, "pathext" );
if ( err ) return -1;
printf( "pathext = %s\n", pValue );
free( pValue );
err = _dupenv_s( &pValue, &len, "nonexistentvariable" );
if ( err ) return -1;
printf( "nonexistentvariable = %s\n", pValue );
free( pValue ); // It's OK to call free with NULL
}
出力例
pathext = .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.pl
nonexistentvariable = (null)
同等の .NET Framework 関数
System::Environment::GetEnvironmentVariable