Я работаю с C ++ и пытаюсь сравнить строки.

Ниже мой код, который возвращает мне const char* -

    const char* client_id() const {
        return String(m_clientPos);
    }

А теперь я сравниваю струны вот так -

cout<<client_ptr->client_id()<< endl;
if (strcmp(client_ptr->client_id(), "Hello")) {
    ..
} else {
    ..
}

Но это никогда не входит в оператор if. Но мой cout выводит Hello правильно. Я делаю что-то не так?

0
john 21 Май 2014 в 06:41

2 ответа

Лучший ответ

Вам нужно сделать if (0 == strcmp(...

См. http://www.cplusplus.com/reference/cstring/strcmp/.

strcmp

Возвращает целое значение, указывающее взаимосвязь между строками: нулевое значение указывает, что обе строки равны. Значение больше нуля указывает, что первый несоответствующий символ имеет большее значение в str1, чем в str2; А значение меньше нуля указывает на обратное.

4
Community 20 Июн 2020 в 09:12

он никогда не входит в оператор if.

Функция strcmp возвращает ноль, когда строки совпадают, поэтому вы должны увидеть, как код попадает в ветвь else, когда две строки равны друг другу.

  • Нулевое значение означает, что обе строки равны.
  • Значение больше нуля указывает, что первый несоответствующий символ имеет большее значение в str1, чем в str2;
  • А значение меньше нуля указывает на обратное.

Поскольку String не выглядит как встроенный класс и, предполагая, что у вас есть доступ к его источнику, вам может быть лучше провести сравнение с const char* функцией-членом класса String. .

2
Sergey Kalinichenko 21 Май 2014 в 02:45