Ошибка памяти при использовании const char*?

Привет, я работаю с C++ на платформе Linux, мне нужно получить значение переменной среды (определяемой пользователем) и использовать ее дальше. Ниже приведен код, который я использую,

const char *show_line = getenv ("MY_SHOW_LINES");

bool myFlag = (strcmp(show_line, "1") == 0) ? false : true;

Приведенный выше код выполняется правильно, когда я устанавливаю значение переменной среды (MY_SHOW_LINES) равным 1, но когда я сбрасываю его значение (т.е. сбрасываю MY_SHOW_LINES). Приведенный выше код дает ошибку памяти. Любые предложения по вышеуказанному НЕ-ожидаемому поведению?? заранее спасибо


person BSalunke    schedule 11.04.2012    source источник
comment
См. stackoverflow.com/questions/4932848/strcmp-behaviour.   -  person Rohit Karlupia    schedule 11.04.2012


Ответы (2)


Если вы передадите указатель NULL на strcmp, вы получите неопределенное поведение, в данном случае очень вероятный сбой.

Знаете ли вы, что указатели могут быть NULL, т.е. намеренно недействительными?

Вы должны остерегаться такой возможности:

bool myFlag = false; // set default value
if ( show_line != NULL ) {
    myFlag = ( strcmp(show_line, "1") != 0 ); // "? false : true" same as NOT…
}
person Potatoswatter    schedule 11.04.2012

Согласно справочной странице,

Функция getenv() возвращает указатель на значение в среде или NULL, если совпадений нет.

Поэтому, если он не существует, он возвращает NULL, что вызывает проблемы с перевариванием для strcmp().

person glglgl    schedule 11.04.2012