在 C++ 中获取环境变量 - 我得到 NULL

Posted

技术标签:

【中文标题】在 C++ 中获取环境变量 - 我得到 NULL【英文标题】:Get environment variable in c++ - I get NULL 【发布时间】:2012-12-21 19:31:49 【问题描述】:

我正在尝试获取环境变量的内容,如果它存在的话。

#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...

注意:我使用了编译指示警告,因为我读到 getenv 已被弃用或其他什么。

请告诉我为什么我没有得到有效值。谢谢。

【问题讨论】:

env-var是否真的设置在程序运行的环境中? 该错误可能在您未发布的代码中。 更改环境变量后重启IDE。 我认为重建会自动让每个人都知道这个变量。我刚刚重新启动计算机,一切都神奇地工作了。如果您可以发布,我想将您的答案标记为答案。否则会将现有答案标记为“答案”,因为它告诉我我的代码有效。 @Thalia 环境变量在进程创建期间被继承。每个进程都有自己的环境变量。这意味着如果您更改进程的环境变量,更改后生成的子进程将拥有它,而之前的子进程不会。由于您的 IDE 是在更改之前生成的,因此它和它生成的任何进程都不会继承它。如果其父进程具有环境变量,则需要关闭它再次启动它。 【参考方案1】:

您的代码没问题。 添加/删除环境变量后,您只需重新启动 Visual Studio 或/和计算机。

【讨论】:

【参考方案2】:

您发布的代码应该可以工作。无论如何,它对我有用。也许你没有得到正确的 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);            
       

【讨论】:

谢谢,你说得对,我的代码有效。我喝了第二杯咖啡,重新启动了我的电脑——发现我非常努力地解决了一个不存在的问题。感谢您的帮助。

以上是关于在 C++ 中获取环境变量 - 我得到 NULL的主要内容,如果未能解决你的问题,请参考以下文章

[C++] 系统环境变量和用户变量同名 如何才能获取系统环境变量

在 C / C++ 中打印所有环境变量

通过编译器环境变量或 C 和 C++ 中的命令行标志指定库路径?

无法在 Django 设置文件中获取环境变量

C++中如何把指针中的值取出来赋给常规变量

C++ 避免将 NULL 与 0 进行比较