从Windows获取c ++中的系统环境

时间:2013-09-10 12:56:04

标签: c++ windows environment-variables

我尝试从我的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);            
}   

2 个答案:

答案 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;
}