_putenv_s
,_wputenv_s
创建、修改或删除环境变量。 这些函数的版本是 _putenv
、_wputenv
,具有安全性增强功能,如 CRT 中的安全性功能中所述。
重要
此 API 不能用于在 Windows 运行时中执行的应用程序。 有关详细信息,请参阅通用 Windows 平台应用中不支持的 CRT 函数。
语法
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 |
any | EINVAL |
任意 | NULL |
EINVAL |
如果发生某个错误条件,这些函数将调用无效参数处理程序,如参数验证中所述。 如果允许执行继续,则这些函数将返回 EINVAL
并将 errno
设置为 EINVAL
。
备注
_putenv_s
函数添加了新的环境变量,或修改了现有环境变量的值。 环境变量定义过程执行的环境(例如待与程序链接的库的默认搜索路径)。 _wputenv_s
是 _putenv_s
的宽字符版本; envstring
的 _wputenv_s
参数是宽字符字符串。
默认情况下,此函数的全局状态范围限定为应用程序。 若要更改此行为,请参阅 CRT 中的全局状态。
一般文本例程映射
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
的值,因此会使 envp
的 main
参数和 _wenvp
的 wmain
参数无效。 因此,使用 _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
。
另请参阅
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈