Как проверить «бинарный» или неустановленный символ *?

0

EDIT: добавлены некоторые уточнения, которые сильно меняют условие вопроса, обратите внимание, что прежде чем судить ответы.

Я получаю переменную среды в форме const char*. Env var может быть

  • Unset (Unset Я имею в виду, если env vars, например, взяты из пакетной среды, set MyBinaryEnvVar=)
  • Установите значение 0
  • Установите значение 1

Следовательно, const char * form будет

  • ""
  • "0"
  • "1"

Я хотел бы протестировать его с одним лайнером, Unset и "0", не пройдя тест, и "1" передав его. Итак, что-то вроде:

if(getEnvVar("MyBinaryEnvVar")) {dontWorry();}
else {beHappy();}

getEnvVar возвращает const char *.

Тесты показали на VisualStudio 2010, что три значения для envVar проходят тест, поэтому
if ("") <==> if ("0") <==> if ("1") <==> TRUE

благодаря

Теги:
if-statement
char

2 ответа

2
Лучший ответ

Предполагая, что getEnvVar может возвращать NULL для неустановленных значений, вы не можете эффективно проверить NULL и сравнить значение в одной строке.

Предполагая, что вы сделаете много этого и хотите получить сжатый способ сделать это, вы можете делегировать обе операции к новой функции и называть ее как однострочный:

bool isVarSet(const char* var)
{
    const char* val = getEnvVar("MyBinaryEnvVar");
    if (val != NULL && strcmp(val, "1") == 0) {
        return true;
    }
    return false;
}

if(isVarSet("MyBinaryEnvVar")) {dontWorry();}
else {beHappy();}

С другой стороны, если getEnvVar возвращает пустую строку "" для неустановленных значений, вы можете просто сделать

if(strcmp(getEnvVar("MyBinaryEnvVar"), "1") == 0) {dontWorry();}
else {beHappy();}
  • 0
    Лучший ответ на данный момент. Во второй части я не могу использовать strcmp, хотя
  • 0
    Подтвердив ваш ответ, я должен найти эквивалент strcmp.
Показать ещё 4 комментария
3

См. strcmp() для сравнения строк. Все значения, возвращаемые getenv() являются строками. Все, что вам нужно, это оператор if.

Обратите внимание, что ваша логика пропускает "другой" случай (когда значение действительно не задано (т.е. getenv() возвращает NULL), или это что-то другое, чем указанные выше значения.

  • 0
    Я бы рекомендовал, по крайней мере, более безопасную версию strncmp() или использовать std::string как OP запрашивает c ++ .
  • 0
    Я не могу использовать strcmp (ограничения компании). Мой getenv не возвращает строки, но const char, как указано. Я проясняю Unset / нулевой случай в вопросе, спасибо
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню