我尝试从我的C ++应用程序中获取Windows中的一些系统环境。我尝试了getenv和GetEnvironmentVariable,但都陷入了困境。一个程序编译,但是当我运行它时,我看到指针闪烁了一段时间,没有显示任何内容,然后程序崩溃并显示消息:
RUN FAILED(退出值-1 073 741 819,总时间:10秒)
我在网上尝试了很多例子,所有这些例子都给出了相同的结果。我试过的一些例子:
char l_strSingleVal[20];
GetEnvironmentVariable("PATH", l_strSingleVal,20);
printf("VariableName: %s\n",l_strSingleVal);
或:
std::string string_variable;
const std::string MY_VAR = "PATH";
char const* temp = std::getenv(MY_VAR.c_str());
if(temp != NULL)
{
string_variable = std::string(temp);
}
答案 0 :(得分:3)
你有未定义的行为:
来自GetEnvironmentVariable规范(l_strSingleVal相当于lpBuffer):http://msdn.microsoft.com/en-us/library/windows/desktop/ms683188(v=vs.85).aspx
如果lpBuffer不足以容纳数据,则返回值为 保存字符串及其所需的缓冲区大小(以字符为单位) 终止空字符和lpBuffer的内容是未定义的。
在你的情况下访问lpBuffer是UB。 PATH的20个字符缓冲区太小了。您需要检查GetEnvironmentVariable
的返回值(在您的情况下,它将告诉您成功调用所需的缓冲区大小)。
答案 1 :(得分:1)
尝试过C标准库函数getenv
?它适用于我的Windows PC。
示例:
#include <stdlib.h>
#include <stdio.h>
int main()
{
char * src = getenv("PATH");
if (src)
printf("value of PATH is: %s", src);
else
printf("empty or not defined");
return 0;
}