Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

31.07.2014, 12:47. Просмотров 399. Ответов 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, но до конца не уверен. Или тут теряются байты в массиве?
Какой тут диагноз и как это лечится?
Сам новичок, поэтому буду благодарен более-менее понятным объяснениям. Буду рад вообще любой помощи.
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.07.2014, 12:47
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Сравнение символьных буфферов (массивов) (C++):

Сравнение двух символьных массивов - char C++ - C++
Доброго времени суток! Столкнулся с проблемой кода программы. Мне нужно сравнить текст из файла (primer.txt), и сравнить его с текстом,...

Сравнение символьных строк - 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++
Помогите пожалуйста в учебниках про строки вообще мало что пишут, как заполнять массив из нескольких строк, с клавиатуры. Без методов...

3
Vourhey
Почетный модератор
6486 / 2260 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
31.07.2014, 12:51 #2
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Alex_The_King Посмотреть сообщение
if(buffer=="quit")
Нельзя так сравнивать строки.
Цитата Сообщение от Alex_The_King Посмотреть сообщение
Пробовал сравнивать через строковые функции strcmp, strncmp. Ноль результата
А код? strncmp работает. С этим как бы спорить бесполезно это значит, что ошибка в твоем коде.
1
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
0
Vourhey
Почетный модератор
6486 / 2260 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
31.07.2014, 17:42 #4
Цитата Сообщение от Alex_The_King Посмотреть сообщение
ВСЕ ВЫШЛО. БЛАГОДАРЮ. Надо было добавить в if вот что: strncmp(buff, quit, 5)==0
Надо внимательнее читать документацию к функции, там написано, что возвращается 0, когда группа символов идентична другой группе.
0
31.07.2014, 17:42
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.07.2014, 17:42
Привет! Вот еще темы с ответами:

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

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