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

Getting system env in c++ from windows

本文关键字:系统环境 c++ Windows 获取      更新时间:2023-10-16

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

运行失败(退出值 -1 073 741 819,总时间:10 秒)

我从网上尝试了很多例子,它们都给出了相同的结果。我尝试过的一些例子:

char l_strSingleVal[20];
GetEnvironmentVariable("PATH", l_strSingleVal,20);
printf("VariableName: %sn",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);            
}   

你有未定义的 behviour:

来自 GetEnvironmentVariable spec(l_strSingleVal 相当于 lpBuffer):http://msdn.microsoft.com/en-us/library/windows/desktop/ms683188(v=vs.85).aspx

如果 lpBuffer 不够大,无法保存数据,则返回值为 保存字符串及其所需的缓冲区大小(以字符为单位) 终止空字符和 lpBuffer 的内容未定义。

在您的情况下访问 lpBuffer 是 UB。PATH 的 20 个字符缓冲区太小了。您需要检查 GetEnvironmentVariable 的返回值(在您的情况下,这将告诉您成功调用所需的缓冲区大小)。

尝试过 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;
}