事情起因是某一天需要在vs2010的工程中去动态配置adb环境变量,win10环境
一开始,使用了putenv,很快进入代码调试,死活无法达成目的(奇怪的是另外一个工程就能修改成功)
一番面向运气编程,最后用_putenv实现了配置环境变量。
但不知道根本原因是啥,做出一些猜想:
putenv已经被取代,在某些场景下用不了,只能用_putenv,下面是官方说明文档里面的内容
下面的是代码
char szbuffer [2048] = {0};CString str;std::string strPath = getenv("PATH");str = strPath.c_str();str = _T("PATH=") + str + _T(";D:\AdbPath");CoverCStringToChar(str,szbuffer,2048);_putenv(szbuffer);std::string strTemp = getenv("PATH");
//字符转换
int CoverCStringToChar(const CString &strsrc,char *szdet,int len)
{int n = strsrc.GetLength();int charlen = 0;int lenByte = WideCharToMultiByte(CP_ACP, 0, strsrc, n, NULL, 0, NULL, NULL);charlen = WideCharToMultiByte(CP_ACP, 0, strsrc, n, szdet, lenByte, NULL, NULL); return charlen;
}
附加说明
putenv, _putenv, _tputenv, _wputenv:修改一个操作系统环境变量的值,只是针对当前进程有效
_putenv_s、_wputenv_s 是这些函数的更安全版本