_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
環境變數名稱。
傳回值
若成功,就是零;若失敗,則為錯誤碼。
這些函式會驗證其參數;若 buffer 或 varname 為 NULL,會叫用無效參數處理常式,如 參數驗證 中所述。 若允許繼續執行,函式會將 errno 設定為 EINVAL 並傳回 EINVAL。
若這些函是無法配置足夠的記憶體,會將 buffer 設定為 NULL,將 numberOfElements 設定為 0,並傳回 ENOMEM。
備註
_dupenv_s 函式會在環境變數清單中搜尋 varname。 若找到變數,_dupenv_s 會配置緩衝區,並將變數的值複製到緩衝區中。 會在 buffer 和 numberOfElements 中傳回緩衝區的位址和長度。 _dupenv_s 可透過配置緩衝區本身提供比 getenv_s、_wgetenv_s 更方便的選擇。
注意事項 |
---|
其會呼叫程式的責任藉由呼叫 釋放 釋放記憶體。 |
若找不到變數,buffer 會設為 NULL,numberOfElements 則設為 0,且傳回值為 0,因為此情況不會被認為是錯誤狀況。
若您不需要緩衝區的大小,可以忽略 numberOfElements 的 NULL。
_dupenv_s 在 Windows 作業系統中不區分大小寫。 _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