linux c / c ++ - странная проблема if / else - PullRequest
2 голосов
/ 23 марта 2011

Я запрашиваю таблицу mysql, которая затем просматривает результаты.

В одном из полей есть значение "0", поэтому, когда я пытаюсь выполнить следующее, оно не работает!

while ((row2 = mysql_fetch_row(resultset2)) != NULL) {
    if (row2[2] != "0") {
        // the field has a value of 0, but it's still executing the code here!
    } else {
        // should be executing this code
    }
}

Я знаю, что C / C ++ очень строг, когда дело касается переменных (unlink php), но я не могу понять это.У кого-нибудь есть идеи, почему?

Ответы [ 2 ]

11 голосов
/ 23 марта 2011

Вы сравниваете row2[2], указатель на char, с указателем на константу char массив "0".

Использование strcmp(row2[2], "0") != 0 (решение C), std::string(row2[2]) != "0"(Решение C ++) или atoi(row2[2]) != 0, если вы знаете, row2[2] всегда является строковым представлением целого числа (и не может быть значением SQL NULL).

1 голос
/ 23 марта 2011

Строковый литерал нельзя сравнивать так:

if (row2[2] != "0") //wrong

Либо вы делаете это:

if (strcmp(row2[2], "0")) //correct 

Или это:

if (std::string(row2[2]) != "0") //correct

Для этого конкретного случая, когда есть только один символ, вы также можете сделать это:

if (row2[2][0] != '0') //correct  - not the single quote around 0!
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...