Форум программистов, компьютерный форум CyberForum.ru

Сравнение символьных буфферов (массивов) - C++

Восстановить пароль Регистрация
 
Alex_The_King
1 / 1 / 0
Регистрация: 31.07.2014
Сообщений: 55
31.07.2014, 12:47     Сравнение символьных буфферов (массивов) #1
Добрый всем день. Заранее прошу прощения, если такая тема уже существует или существовала.
Не смог корректно сформулировать поисковый запрос.

Я новичок в C++. Задача состоит в том, чтобы добавить команду на отключение, после отправки сообщения со словом quit через сокеты от клиента ===> серверу.
С задачами клиента и сервера я справился, более или менее. Однако попытка сравнения, ничего не дает.

Пример кода:
C++
1
2
3
4
5
6
7
8
9
10
while(1){
    int size = recv(my_sock, buffer, sizeof(buffer), 0);
    if(size < 0){ cout << "Error. Client left" << endl; closesocket(my_sock); exit(0);}
    cout << buffer << endl;
    if(buffer=="quit"){
        cout << "WE IN IF" << endl;
        shutdown(my_sock, SD_BOTH);
        }
    }
}
Пробовал сравнивать через строковые функции strcmp, strncmp. Ноль результата. Даже такой код не выполняется корректно:
C++
1
2
3
4
5
6
7
8
9
#include <iostream>
 
using namespace std;
 
int main(){
    char quit[255] = "quit";
    char buffer[255] = "quit";
    if(quit==buffer){ cout << "WE'RE IN IF" << endl; }
}
Использую Code::Blocks, компилятор GNU GCC. Думал дело в \0, но до конца не уверен. Или тут теряются байты в массиве?
Какой тут диагноз и как это лечится?
Сам новичок, поэтому буду благодарен более-менее понятным объяснениям. Буду рад вообще любой помощи.
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Vourhey
Почетный модератор
6468 / 2243 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
31.07.2014, 12:51     Сравнение символьных буфферов (массивов) #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Alex_The_King Посмотреть сообщение
if(buffer=="quit")
Нельзя так сравнивать строки.
Цитата Сообщение от Alex_The_King Посмотреть сообщение
Пробовал сравнивать через строковые функции strcmp, strncmp. Ноль результата
А код? strncmp работает. С этим как бы спорить бесполезно это значит, что ошибка в твоем коде.
Alex_The_King
1 / 1 / 0
Регистрация: 31.07.2014
Сообщений: 55
31.07.2014, 12:56  [ТС]     Сравнение символьных буфферов (массивов) #3
Спасибо, сейчас опробую

Добавлено через 3 минуты
Не получилось. Возможно что-то не так делаю.

C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
#include <cstring>
 
using namespace std;
 
int main()
{
    char buff[255];
    cin.getline(buff, 255);
    char quit[255] = "quit";
    if(strncmp(buff, quit, 5)){ cout << "hello" << endl; }
}
ВСЕ ВЫШЛО. БЛАГОДАРЮ. Надо было добавить в if вот что: strncmp(buff, quit, 5)==0
Vourhey
Почетный модератор
6468 / 2243 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
31.07.2014, 17:42     Сравнение символьных буфферов (массивов) #4
Цитата Сообщение от Alex_The_King Посмотреть сообщение
ВСЕ ВЫШЛО. БЛАГОДАРЮ. Надо было добавить в if вот что: strncmp(buff, quit, 5)==0
Надо внимательнее читать документацию к функции, там написано, что возвращается 0, когда группа символов идентична другой группе.
Yandex
Объявления
31.07.2014, 17:42     Сравнение символьных буфферов (массивов)
Ответ Создать тему
Опции темы

Текущее время: 05:45. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru