_putenv、_wputenv

创建,修改或移除环境变量。 有关这些函数的更多安全版本,请参见 _putenv_s、_wputenv_s

重要

此 API 不能用于在 Windows 运行时中执行的应用程序。有关详细信息,请参见 CRT functions not supported with /ZW(CRT 函数不支持使用/ZW)。

int _putenv(
   const char *envstring 
);
int _wputenv(
   const wchar_t *envstring 
);

参数

  • envstring
    环境字符串定义。

返回值

如果成功,返回 0;如果错误,返回– 1 。

备注

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

一般文本例程映射

Tchar.h 例程

未定义 _UNICODE 和 _MBCS

已定义 _MBCS

已定义 _UNICODE

_tputenv

_putenv

_putenv

_wputenv

envstring 参数必须是指向 varname=string窗体字符串的指针,varname 是要添加或修改的环境变量名称, string 是变量值。 如果 varname 已经属于该环境的一部分,其值被string替换;否则,新的 varname变量 及其 string 值被添加到该环境。 也就是说,您可以通过指定空 string从该环境移除变量 —换句话说就是通过指定唯一的 varname=。

_putenv 和 _wputenv 只影响到对于当前进程是本地的环境;不能将这些修改命令级环境。 即这些函数只在可以访问运行库的数据结构运行,而不在由操作系统为进程创建的环境段运行。 在当前进程停止时,环境还原到调用进程级别 (大多数情况下,操作系统级别)。 但是,_spawn、_exec或 system创建的新进程可以传递修改的环境,并且,这些新进程获取所有由 _putenv 和 _wputenv添加的新项。

不要直接更改环境项:相反,应使用 _putenv 或 _wputenv 更改它。 具体而言,_environ[] 全局数组的直接释放组件可能会导致无效内存被寻址。

getenv 和 _putenv 使用全局变量 _environ 访问环境表;_wgetenv 和 _wputenv 使用 _wenviron。 _putenv 和 _wputenv 可能更改 _environ 和 _wenviron的值,因此无效 _envp 参数传递给 main ,wenvp 参数传递给 wmain。 因此,使用 _environ 或 _wenviron 访问环境信息会更加安全。 有关全局变量_putenv 和 _wputenv 的关系,请参见 _environ,_wenviron

备注

_putenv_getenv函数系列不是线程安全的。_getenv 可以返回字符串指针,当 _putenv 修改该字符串时,会导致随机崩溃。确保对这些函数的调用同步。

要求

例程

必需的标头

_putenv

<stdlib.h>

_wputenv

<stdlib.h> 或 <wchar.h>

有关兼容性的更多信息,请参见兼容性

示例

有关如何使用 _putenv 的示例,请参见getenv、_wgetenv

.NET Framework 等效项

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

请参见

参考

进程和环境控制

getenv、_wgetenv

_searchenv、_wsearchenv