_putenv_s
、 、 _wputenv_s
_tputenv_s
建立、修改或移除環境變數。 這些函式是 具有安全性增強功能的 _putenv
_wputenv
版本,如CRT中的安全性功能中所述。
重要
這個 API 不能用於在 Windows 執行階段中執行的應用程式。 如需詳細資訊,請參閱 CRT functions not supported in Universal Windows Platform apps (通用 Windows 平台應用程式中不支援的 CRT 函式)。
如需 _tputenv_s
,請參閱 泛型文字函式對應。
語法
errno_t _putenv_s(
const char *varname,
const char *value_string
);
errno_t _wputenv_s(
const wchar_t *varname,
const wchar_t *value_string
);
參數
varname
環境變數名稱。
value_string
要設定的環境變數值。
傳回值
如果成功則為 0,否則為錯誤碼。
錯誤條件
varname |
value_string |
傳回值 |
---|---|---|
NULL |
任意 | EINVAL |
任意 | NULL |
EINVAL |
如果發生其中一個錯誤狀況,這些函式會叫用無效的參數處理程式,如參數驗證中所述。 如果允許繼續執行,這些函式會傳回 EINVAL
,並將 errno
設為 EINVAL
。
備註
_putenv_s
函式會加入新的環境變數,或修改現有環境變數的值。 環境變數會定義處理序所執行的環境 (例如,要與程式連結之程式庫的預設搜尋路徑)。 _wputenv_s
是寬字元版本的 _putenv_s
; envstring
的 _wputenv_s
引數是寬字元字串。
根據預設,此函式的全域狀態會限定於應用程式。 若要變更此行為,請參閱 CRT 中的全域狀態。
泛型文字函式對應
數據行中的 tchar.h
函式會根據編譯時期定義的字元集,對應至其他數據行中的函式。
tchar.h 函式 |
_UNICODE 和 _MBCS 未定義 |
_MBCS 已定義 |
_UNICODE 已定義 |
---|---|---|---|
_tputenv_s |
_putenv_s |
_putenv_s |
_wputenv_s |
varname
是要加入或修改之環境變數的名稱,而 value_string
是變數的值。 如果 varname
已是環境的一部分,則其值會取代為 value_string
;否則新 varname
變數和其 value_string
會加入環境。 您可以指定空字串 (也就是 ""
) value_string
來從環境中移除變數。
_putenv_s
且 _wputenv_s
只會影響目前進程本機的環境;您無法使用它們來修改命令層級環境。 這些函式只會在執行階段程式庫可以存取的資料結構上運作,而不會在作業系統為某個處理序所建立的環境「區段」上運作。 目前處理序終止時,環境會還原為呼叫處理序層級,而這在大部分情況下是作業系統層級。 不過,修改過的環境可以傳遞至 _spawn
、_exec
或 system
所建立的任何新處理序,而這些新的處理序會取得 _putenv_s
和 _wputenv_s
所加入的任何新項目。
請勿直接變更環境專案;請改用 _putenv_s
或 _wputenv_s
來變更它。 特別的是,直接釋出 _environ[]
全域陣列的項目可能會造成需要處理的無效記憶體。
getenv
和 _putenv_s
使用全域變數 _environ
來存取環境資料表;_wgetenv
和 _wputenv_s
使用 _wenviron
。 _putenv_s
和 _wputenv_s
可能會變更 _environ
和 _wenviron
的值,進而讓 main
的 envp
引數和 wmain
的 _wenvp
引數失效。 因此,使用 _environ
或 _wenviron
存取環境資訊更安全。 如需 與全域變數關聯_putenv_s
性的詳細資訊,請參閱 。_environ
_wenviron
_wputenv_s
注意
_putenv_s
和 _getenv_s
系列的函式不是安全執行緒。 _putenv_s
正在修改字串時,_getenv_s
可能會傳回字串指標,因而導致隨機失敗。 確定這些函式的呼叫已同步。
需求
常式 | 必要的標頭 |
---|---|
_putenv_s |
<stdlib.h> |
_wputenv_s |
<stdlib.h> 或 <wchar.h> |
如需相容性詳細資訊,請參閱相容性。
範例
如需示範如何使用 _putenv_s
的範例,請參閱 。 _wgetenv_s
getenv_s