_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。有关更多信息,请参见平台调用示例。