【问题标题】:using getenv and env doesn't give the same results:使用 getenv 和 env 不会给出相同的结果:
【发布时间】:2014-04-08 20:50:07
【问题描述】:

我有一个 C 程序,它打印每个环境变量,其名称由标准输入给出。它打印 $PATH、$USER 等变量,但看不到我在 Linux shell 中定义的环境变量...例如,在 ~.bashrc 中我导出了 MYTEST=test_is_working,然后我获取了 bashrc(来源〜/ .bashrc)。 我希望程序使用 getenv 返回 test_is_working 但它没有。

#include <QCoreApplication>
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    char* my_env= getenv("MYTEST");

    if(my_env!=NULL){
        printf("my env is : %s \n", my_env);
    }
    else {
        printf("can't find env \n");
    }
return a.exec();
}

返回:找不到环境

当我打开终端并输入“env”时,我有 MYTEST=test_is_working

我看到一个类似的帖子:Using getenv function 解决方案是从 shell 启动程序。但我不能,因为我在 Qtcreator 中运行和调试。

我不知道我哪里错了,谁能给我解释一下?

谢谢

【问题讨论】:

  • 如果从 shell 运行 QtCreator 会怎样?
  • 请注意,您可以在 Qt creator 中的“运行设置”对话框的某处设置环境变量。
  • 所以是的,如果我从终端启动 qtcreator 就可以了,不知道为什么我没想到,谢谢

标签: c qt shell env getenv


【解决方案1】:
  1. 环境变量仅传递给设置变量后启动的子进程。因此,在 shell 中设置它们不会改变 Qt Creator 和从它启动的程序中的任何内容。
  2. Qt Creator 允许自定义环境变量(我见过)。
    检查项目设置(运行部分)和/或 Qt Creator 属性(应该很容易找到)。
  3. 您还可以在项目设置、运行部分中设置 qt creator 中的程序参数(甚至重定向标准流)。

【讨论】:

  • 如果我从 shell 启动 Qtcreator 不是让他成为 shell 的子进程吗?我不应该找到我已经放入其中的变量吗?是的,我可以在我的项目中自定义环境变量,但如果我在其他地方提供或复制我的项目,它不会保存我的变量。
  • 如果每次执行程序时直接将变量添加到我的项目代码中,我将失去在系统上不同进程之间共享的环境变量的效用。
  • 例如,我的所有程序都有一个日志系统,它的路径有环境变量,我想检索它。也许我不能,但我想知道这是否可能。否则我会把路径放在我的代码中。
猜你喜欢
  • 1970-01-01
  • 2017-05-21
  • 1970-01-01
  • 1970-01-01
  • 2019-04-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-16
相关资源
最近更新 更多