1

我尝试从我的 C++ 应用程序中获取 Windows 中的一些系统环境。我尝试了 getenv 和 GetEnvironmentVariable 但都卡住了。程序编译,但是当我运行它时,我看到指针闪烁了一段时间,没有显示,然后程序崩溃并显示消息:

RUN FAILED(退出值-1 073 741 819,总时间:10s)

我尝试了很多来自网络的示例,所有示例都给出了相同的结果。我试过的一些例子:

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);            
}   
4

2 回答 2

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(在您的情况下,它将告诉您成功调用所需的缓冲区大小)。

于 2013-09-10T13:05:40.803 回答
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;
}
于 2013-09-10T13:01:15.570 回答