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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Alex_The_King
1 / 1 / 0
Регистрация: 31.07.2014
Сообщений: 55
#1

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

31.07.2014, 12:47. Просмотров 369. Ответов 3
Метки нет (Все метки)

Добрый всем день. Заранее прошу прощения, если такая тема уже существует или существовала.
Не смог корректно сформулировать поисковый запрос.

Я новичок в 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)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.07.2014, 12:47     Сравнение символьных буфферов (массивов)
Посмотрите здесь:

Сравнение символьных строк - C++
Подскажите пожалуйста какие сделать в программе исправления чтобы начало работать условие и в случае ввода другого имени выводилось бы&quot;...

Сравнение двух символьных строк - C++
условие задачи состоит в том,чтобы написать программу для сравнения двух символьных строк,но с применением выделения динамической памяти

Копирование символьных массивов - C++
Вот самые проблемные места: #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;math.h&gt; #include &lt;iomanip&gt; ...

Вопрос по выводу символьных массивов - C++
Никак не могу понять, почему при наличии символьного массива, например char test = &quot;test message&quot;, при его выводе вроде cout &lt;&lt; &quot;test: &quot; &lt;&lt;...

Заполнение двумерных символьных массивов - C++
Помогите пожалуйста в учебниках про строки вообще мало что пишут, как заполнять массив из нескольких строк, с клавиатуры. Без методов...

Поразрядная сортировка символьных массивов - C++
Всем привет! Кто нибудь может показать пример кода, для поразрядной сортировки символьных массивов, с числовыми массивами разобрался, а с ...

Вывод двух символьных массивов, завершающий символ - C++
Товарищи! Помогите разобраться.... Вот простейшая программа: int main() { setlocale(0, &quot;&quot;); char str1 = { 'м', 'а', 'р',...

Задача на обработку символьных данных (сравнить строку введенным с клавиатуры, и вывести результат сравнение - C++
Здравствуйте. Задача на обработку символьных данных такая: Сравнить строки,введенные пользователем с клавиатуры, и вывести результаты...

Сравнение массивов - C++
Здраствуйте, как можно сравнить два элемента buffer и asd? Вот код: char* buffer = new char ; char sas = {&quot;123xxx&quot;}; ...

Сравнение массивов - C++
Добрый день! Не удается сравнить два массива q и с. Алгоритм шифрует по алгоритму CRC и необходимо расшифровать сообщение, но при...

сравнение массивов - C++
как сравнить два одномерных массива и найти самую длинную их общую часть? сравниваю массивы типа char. допустим мы нашли общий...

сравнение массивов - C++
Доброго времени суток форумчане, помогите пожалуйста написать программу, есть 5 массивов одинаковой размерности, но с разным колличеством...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Vourhey
Почетный модератор
6474 / 2249 / 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
Почетный модератор
6474 / 2249 / 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     Сравнение символьных буфферов (массивов)
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru