我正在尝试获取环境变量的内容,如果存在的话。
#define MY_VAR "MY_ENV_VAR"
//function
#pragma warning(disable:4996)
char const* temp = getenv(MY_VAR);
if(temp != NULL)
{
string_variable = std::string(temp);
}
//code
#pragma warning(default:4996)
我以为我做的是正确的事情,但是一旦我创建了环境变量并给它提供了默认值,我预计temp不会为NULL ...我是否期望过多?
我在调试中,我看到了:
temp 0x00000 <Bad Ptr>
! CXX0030 Error: Expression cannot be evaluated
在命令行中运行“set”会显示环境变量(系统,顺便说一句)。
我在Windows ...
注意:我使用了pragma警告,因为我读过getenv已被弃用或其他什么。
请告诉我为什么我没有得到有效价值。谢谢。
答案 0 :(得分:3)
您的代码没问题。 您只需在添加/删除环境变量后重新启动Visual Studio或/和计算机。
答案 1 :(得分:1)
您发布的代码应该有效。无论如何,它确实适合我。也许你没有得到env变量正确,或者Visual Studio环境没有它。试试这个:
std::string string_variable;
#define MY_VAR "PATH"
int main()
{
char const* temp = getenv(MY_VAR);
if(temp != NULL)
{
string_variable = std::string(temp);
}
}
更好的是,摆脱宏,这样你就可以在运行时看到传递给getenv
的内容:
std::string string_variable;
static const std::string MY_VAR = "PATH";
int main()
{
char const* temp = getenv(MY_VAR.c_str());
if(temp != NULL)
{
string_variable = std::string(temp);
}
}