_dupenv_s_dbg、_wdupenv_s_dbg
更新 : 2007 年 11 月
現在の環境から値を取得します。これらの関数は、_dupenv_s、_wdupenv_s のうち _malloc_dbg によってメモリを割り当て、追加のデバッグ情報を提供するバージョンです。
errno_t _dupenv_s_dbg(
char **buffer,
size_t *numberOfElements,
const char *varname,
int blockType,
const char *filename,
int linenumber
);
errno_t _wdupenv_s_dbg(
wchar_t **buffer,
size_t * numberOfElements,
const wchar_t *varname,
int blockType,
const char *filename,
int linenumber
);
パラメータ
buffer
変数の値を格納するバッファ。numberOfElements
buffer のサイズ。varname
環境変数名。blockType
要求するメモリ ブロックの種類。_CLIENT_BLOCK または _NORMAL_BLOCK。filename
ソース ファイルの名前へのポインタまたは NULL。linenumber
ソース ファイルの行番号または NULL。
戻り値
正常終了した場合は 0 を返します。失敗した場合はエラー コードを返します。
これらの関数は、パラメータを検証します。buffer または varname が NULL の場合、「パラメータの検証」に説明されているように、無効なパラメータ ハンドラが呼び出されます。実行の継続が許可された場合、この関数は errno を EINVAL に設定し、EINVAL を返します。
十分なメモリを割り当てられない場合、これらの関数は buffer を NULL に、numberOfElements を 0 に設定し、ENOMEM を返します。
解説
_dupenv_s_dbg と _wdupenv_s_dbg 関数は、_DEBUG が定義されている場合に malloc、_malloc_dbg のデバッグ バージョンを使用して環境変数の値にメモリを割り当てることを除いて、_dupenv_s と _wdupenv_s 関数と同じです。_malloc_dbg のデバッグ機能の詳細については、「_malloc_dbg」を参照してください。
ほとんどの場合は、これらの関数を明示的に呼び出す必要はありません。代わりに _CRTDBG_MAP_ALLOC フラグを定義します。_CRTDBG_MAP_ALLOC が定義されている場合、_dupenv_s および _wdupenv_s の呼び出しはそれぞれ _dupenv_s_dbg および _wdupenv_s_dbg に再び割り当てられます。このとき、blockType は _NORMAL_BLOCK に設定されます。したがって、ヒープ ブロックを _CLIENT_BLOCK としてマークする場合を除き、これらの関数を明示的に呼び出す必要はありません。ブロック型の詳細については、「デバッグ ヒープ上のメモリ ブロックの型」を参照してください。
汎用テキスト ルーチンのマップ
TCHAR.H のルーチン |
_UNICODE および _MBCS が未定義の場合 |
_MBCS が定義されている場合 |
_UNICODE が定義されている場合 |
---|---|---|---|
_tdupenv_s_dbg |
_dupenv_s_dbg |
_dupenv_s_dbg |
_wdupenv_s_dbg |
必要条件
ルーチン |
必須ヘッダー |
---|---|
_dupenv_s_dbg |
<crtdbg.h> |
_wdupenv_s_dbg |
<crtdbg.h> |
互換性の詳細については、「C ランタイム ライブラリ」の「互換性」を参照してください。
使用例
// crt_dupenv_s_dbg.c
#include <stdlib.h>
#include <crtdbg.h>
int main( void )
{
char *pValue;
size_t len;
errno_t err = _dupenv_s_dbg( &pValue, &len, "pathext",
_NORMAL_BLOCK, __FILE__, __LINE__ );
if ( err ) return -1;
printf( "pathext = %s\n", pValue );
free( pValue );
err = _dupenv_s_dbg( &pValue, &len, "nonexistentvariable",
_NORMAL_BLOCK, __FILE__, __LINE__ );
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