从 Windows 获取 c++ 中的系统环境
Getting system env in c++ from windows
我尝试从我的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;
}
相关文章:
- C++,系统无法执行指定的程序
- 在UNIX系统中使用DIR查找文件的字节大小
- 枚举环境变量的惯用C++14/C++17方法
- 错误处理.将系统错误代码映射到泛型
- 当系统的卷被修改时,如何修改WASAPI环回捕获卷
- 有什么好的方法可以让系统调用代理允许在单元测试中进行模拟
- 在C++游戏中与库存系统作斗争
- 文件系统:复制功能的速度秘诀是什么
- 在 Windows 上,是否可以让 dll 在不使用 PATH 环境变量的情况下在另一个文件夹中查找依赖项?
- c++17文件系统::recursive_directory迭代器()在mac上没有给出这样的目录,但在windows上
- 在gtest.中使用fff.h模拟系统API
- 如何制作无限制照明系统
- 系统.将数组移交给c#中动态加载的c++DLL时发生AccessViolationException
- 如何设置Qt应用程序以使用类Unix系统的实际环境变量?
- 为什么非unicode应用程序系统语言环境使Unicode字体具有错误显示的符号字符
- 在Boost文件系统中使用环境变量
- 从 Windows 获取 c++ 中的系统环境
- 用C++检测Windows环境下的片上系统(SOC)平台
- 如何使用boost库获取系统环境变量
- 如何将系统环境变量作为宏定义放入C头文件