_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
、_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
。