_putenv_s_wputenv_s、、 _tputenv_s

创建、修改或删除环境变量。 这些函数的版本是 _putenv_wputenv,具有安全性增强功能,如 CRT 中的安全性功能中所述。

重要

此 API 不能用于在 Windows 运行时中执行的应用程序。 有关详细信息,请参阅通用 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_execsystem 创建的任何新进程,这些新进程将获取由 _putenv_s_wputenv_s 添加的所有新项。

不要直接更改环境条目;而是使用 _putenv_s_wputenv_s 更改它。 具体而言,直接释放 _environ[] 全局数组的元素可能会导致对无效内存寻址。

getenv_putenv_s 使用全局变量 _environ 来访问环境表;_wgetenv_wputenv_s 使用 _wenviron_putenv_s_wputenv_s 可能更改 _environ_wenviron 的值,因此会使 envpmain 参数和 _wenvpwmain 参数无效。 因此,使用 _environ_wenviron 来访问环境信息更安全。 若要详细了解 _putenv_s_wputenv_s 与全局变量的关系,请参阅 _environ_wenviron

注意

_putenv_s_getenv_s 系列的函数不是线程安全函数。 当 _getenv_s 修改字符串时,_putenv_s 会返回字符串指针,从而导致随机失败。 确保对这些函数的调用同步。

要求

例程 必需的标头
_putenv_s <stdlib.h>
_wputenv_s <stdlib.h><wchar.h>

有关兼容性的详细信息,请参阅 兼容性

示例

有关说明如何使用 _putenv_s 的示例,请参阅 getenv_s_wgetenv_s

另请参阅

进程和环境控制
getenv, _wgetenv
_searchenv, _wsearchenv