Share via


_putenv_s、_wputenv_s

创建,修改或移除环境变量。 _putenv、_wputenv 的一些版本提供安全增强功能(如 CRT 中的安全功能所述)。

重要

此 API 不能用于在 Windows 运行时 中执行的应用程序。有关更多信息,请参见不支持 /ZW 的 CRT 函数

errno_t _putenv_s(
   const char *name,
   const char *value 
);
errno_t _wputenv_s(
   const wchar_t *name,
   const wchar_t *value
);

参数

  • name
    环境变量名。

  • value
    环境变量要设置的值。

返回值

如果成功或错误代码,返回 0。

错误情况

name

value

返回值

NULL

any

EINVAL

any

NULL

EINVAL

如果任一错误状态发生,这些函数调用无效参数句柄,如 参数验证所述。 如果允许执行继续,则这些函数返回 EINVAL 并将 errno 设置为 EINVAL。

备注

_putenv_s 函数添加新环境变量或修改现有环境变量的值。 环境变量定义进程执行环境 (例如,可以将库的默认查找路径与程序链接)。 _wputenv_s 是 _putenv_s 的宽字符版本;_wputenv_s 的 envstring 参数是宽字符字符串。

一般文本例程映射

TCHAR.H 例程

未定义的 _UNICODE& 和 _MBCS

已定义 _MBCS

已定义 _UNICODE

_tputenv_s

_putenv_s

_putenv_s

_wputenv_s

name 是要添加或修改的环境变量的名称, value 是变量的值。 如果 name 已经属于该环境的一部分,其值被value替换;否则,新的 name变量及其 value 值被添加到该环境。 您可从移除环境变量来指定为空字符串 (即"") 的 value。

_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

.NET Framework 等效项

不适用。若要调用标准 C 函数,请使用 PInvoke。有关详细信息,请参阅平台调用示例

请参见

参考

进程和环境控制

getenv、_wgetenv

_searchenv、_wsearchenv