我尝试从我的C ++应用程序中获取窗口中的一些系统环境。 我尝试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); }
你有没有定义behviour:
从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
的返回值(在你的情况下会告诉你成功调用所需的缓冲区的大小)。
试过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; }