_dupenv_s、_wdupenv_s
更新 : 2007 年 11 月
現在の環境から値を取得します。
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 を検索します。変数が見つかった場合は、バッファが割り当てられ、変数の値がバッファにコピーされます。バッファのアドレスとバッファ長が 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> |
互換性の詳細については、「C ランタイム ライブラリ」の「互換性」を参照してください。
使用例
// 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