MegaCraZy6
@MegaCraZy6
Юзерь

Где ошибка в самодельном strcmp?

Я запланировал так что strcmp возвращает 1 когда строки равние, и 0 когда нет, и когда проверяю
первий елемент беру с массива
char mes2[] = "123123";
второй получаю от клиента по сокетах
char inpu[2048];
Сам код получения по сокету
void ReadSocket()
{
    bzero(inpu,2048);
    int n = recv(client,inpu,2048,0);
    inpu[n] = '\0';
}


Принимает 100%, Я даже для проверки вместо strcmp сделал так:
if ( inpu[0] == mes2[0] && inpu[1] == mes2[1] && inpu[2] == mes2[2] && inpu[3] == mes2[3] && inpu[4] == mes2[4] && inpu[5] == mes2[5] )

И оно работает, когда искал ошибку заметил что не срабативает
if(s1[x] == 0)
        {
            return 1;
        }


Как бутто в конце строки и не ноль...

Весь код strcmp

int strcmp(char *s1, char *s2 )
{
    int x;
    x = 0;
    do{
    if ( s1[x] == s2[x] )
    {
        if(s1[x] == 0)
        {
            return 1;
        }
        x = x + 1;
    }
    }while(s1[x] == s2[x] );
    return 0;
}
  • Вопрос задан
  • 106 просмотров
Решения вопроса 1
@Mercury13
Программист на «си с крестами» и не только
Ваш код коряв (и пишет за пределы буфера, если в потоке действительно окажется 2048 байт) но нуль-терминированные строки отрабатывает правильно.

TCP работает сплошным потоком, и если вы послали в сокет нечто ещё, кроме «123123», он считает весь поток до 2048 байт и, разумеется, строки не совпадут: с одной строны «123123», с другой, например, «123123qwe».

Вам надо своими силами разбивать TCP-поток на сообщения — например, тем самым нулевым символом, CR или двумя/четырьмя байтами длины пакета.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы