Использование getenv и env не дает одинаковых результатов:

У меня есть программа на C, которая печатает каждую переменную среды, имя которой дается stdin. Он печатает переменные, такие как $PATH, $USER, но не видит переменные окружения, которые я определил в оболочке Linux... Например, в ~.bashrc я экспортировал MYTEST=test_is_working, а затем я получил исходный код bashrc (source ~/.bashrc). Я ожидал, что программа вернет test_is_working с getenv, но это не так.

#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

в то время как когда я открываю терминал и ввожу "env", у меня есть MYTEST = test_is_working

Я видел аналогичный пост: Использование функции getenv, где решение заключается в запуске программы из оболочки. Но я не могу, потому что я запускаю и отлаживаю в Qtcreator.

Я не знаю, где я ошибаюсь, кто-то может мне это объяснить?

Спасибо

1 ответ

Решение
  1. Переменная среды передается только дочерним процессам, которые запускались после установки переменной. Поэтому установка их в shell ничего не изменит в Qt Creator и программах, запущенных из него.
  2. Qt Creator позволяет настраивать переменные окружения (я это видел).
    Проверьте настройки проекта (раздел выполнения) и / или свойства Qt Creator (это должно быть легко найти).
  3. Вы также можете установить параметры программы в Qt Creator (даже перенаправлять стандартные потоки), это в настройках проекта, раздел Run.
Другие вопросы по тегам