сравнение буферов - PullRequest
       48

сравнение буферов

3 голосов
/ 18 марта 2011

У меня есть два буфера символов, которые я пытаюсь сравнить их части. У меня странная проблема. у меня есть следующий код:

char buffer1[50], buffer2[60]; 
// Get buffer1 and buffer2 from the network by reading sockets
for(int i = 0; i < 20; i++)
{
    if(buffer1[15+i] != buffer2[25+i])
    {
        printf("%c", buffer1[15+i]);
        printf("%c", buffer2[25+i]);
        printf("%02x", (unsigned char)buffer1[15+i]);
        printf("%02x", (unsigned char)buffer2[25+i]);
        break;
    }
}

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

Проблема в том, что разрывы цикла происходят, даже если оба буфера одинаковы. Чтобы проверить, что находится в буферах, я добавил два оператора печати внутри оператора if. И странная вещь в том, что операторы printf выводят одинаковое значение для% c и% 02x, но сравнение не удается и цикл прерывается.

Ответы [ 2 ]

3 голосов
/ 18 марта 2011

(Отказ от ответственности: я не эксперт C / ++)

Мне кажется, что данные меняются, когда вы на них смотрите. На ум приходят два быстрых вопроса:

  1. Если вы запустите это в отладчике и пошагово пройдете цикл, это все равно произойдет? Если этого не произойдет, то я сильно подозреваю, что мой второй вопрос приведет вас к ответу.
  2. Является ли операция чтения асинхронной? Кажется, что данные все еще читаются, пока вы находитесь внутри цикла for, то есть вы не дожидались окончания чтения.
2 голосов
/ 18 марта 2011

Единственное, что я вижу, это проблема синхронизации. Если они не совпадают в операторе if, и они совпадают в операторе print, кто-то изменил их между.

...