Использование getenv () для чтения переменной среды возвращает переполнение стека NULL

Я пытаюсь прочитать переменную окружения в C ++ согласно эта документация. Мой код выглядит так:

char * val;
val = getenv( "smartDir" );

ShowMessage( val );

delete val;

Моя проблема в том, что val всегда заканчивается NULL, как будто переменная окружения не существует. Тем не менее, я четко определил переменную, как вы можете видеть здесь:

введите описание изображения здесь

Что я здесь не так делаю?

1

Решение

  1. Вы не должны удалять указатель, возвращенный getenv (увидеть Вот, часть о неопределенном поведении)
  2. если вы меняете глобальную среду, имейте ввиду, что env. назначается процессу при его запуске, и все дочерние процессы наследуют его от родительского. Поэтому, если вы запустите программу из IDE / консоли, запущенной до изменения env, это не будет отражено в дочернем процессе.

Чтобы упростить тестирование: большинство IDE предоставляют параметр «Environment» в настройках «Debugging» — вы можете изменить env, передаваемый дочернему процессу (вашей программе) (он есть в Visual, у QtCreator, вероятно, в C ++ Builder и т. Д.). )

Если вы запускаете свою программу из консоли: используйте SET var=value вместо изменения глобального env сделать локальное изменение перед передачей env дочернему процессу.

Оба решения не изменяют глобальные env и позволяют быстро тестировать различные настройки env.

4

Другие решения


По вопросам рекламы [email protected]