c++ - getenv 函数未返回预期答案

标签 c++ linux ubuntu environment-variables

我正在尝试访问我的环境变量之一,即 JAVA_HOME 。 为此,我使用 getenv()函数,像这样:

#include <iostream>
#include <string.h>

int main() {
    const char* env = getenv("JAVA_HOME");
    if(env != NULL)
        std::cout << "Environnement : " << env << std::endl;
    else
        std::cout << "NULL" << std::endl;
    return 0;
}

我尝试过std::getenv("PATH");这会返回与我的文件 /etc/bash.bashrc 不同的内容我把JAVA_HOME放在哪里变量。

我预计std::getenv("JAVA_HOME")返回我放入 /etc/bash.bashrc 中的内容文件。现在它返回不同的东西。

如何获得正确的环境变量?我做错了什么?

我在 Ubuntu 12.04 和 GCC 4.7.2 下使用 C++11 和 QtCreator

编辑:代码

  • Include[...] 是包含的简写

  • 添加了 NULL 处理

编辑:进展

  • 我尝试过extern char **environ但它不包含我需要的一个变量...

编辑:部分解决方案

正如我发现的那样,没有办法轻松地完成这样的事情。 我在 IDE 中设置了个人环境变量来解决这个问题。

最佳答案

您的代码很好,只是您应该显式处理 getenv() 的 NULL 返回值。

问题几乎肯定与您运行代码的方式有关。如果您:

  1. 启动一个 shell;
  2. 确保在该 shell 中正确设置 $JAVA_HOME(通过 bashrc 或任何其他方式);
  3. 从 shell 运行可执行文件;

我打赌它会正常工作。

关于c++ - getenv 函数未返回预期答案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15930696/

相关文章:

c++ - std::function 和 std::mem_fn 有什么区别

linux - 在运送产品之前剥离最大数量的信息

linux - 从 SMBIOS 了解段组、总线、设备和功能编号

laravel - Laravel杀死了Ubuntu

linux - 安装 ceph 失败并显示 "mount error 5 = Input/output error"

Laravel 调度程序在 tmp 文件夹中创建数千个日志文件

c++ - 控制到达非空函数的结尾在 xcode 上是错误的,但在 gcc 上不是错误

python - C++ 相当于 Python 字典

c++ - vector 运算符 [ ] 返回值

linux - 在 libc 的 ARM 程序集中收到 SIGSTOP 信号?