strcmp ведет себя странно - PullRequest
0 голосов
/ 26 июня 2011

У меня есть небольшая программа, которая будет искать некоторые строки в файле.Эта строка имеет переменную часть в конце, и ей всегда предшествует байт, который сообщает размер.

Например, мы будем искать "http://" in" aaaaa. http://www.example.combbbbb" (код ASCII«.» равен 0x17.

Допустим, мы открыли файл. Код, который нужно выполнить:

while(car != EOF){
    car = fgetc(file[ii]); // we get everything in the file
    lastBuffStart=ftell(file[ii]);
    ij=1;
    buffer[0]=car; // we start editing the buffer
    printf("\n%d (%c) - %d (%c) ",car,car,base[0],base[0]);
    while(ij<(buffsize-1)){
         buffer[ij]=fgetc(file[ii]);
         printf("\n | %d (%c) - %d (%c) ",buffer[ij],buffer[ij],base[ij],base[ij]);
         ij++;
    }

    fseek(file[ii],lastBuffStart,0); // we get back to the old position before the buffer continues

    if(strcmp(buffer,base)==0){ // we compare
         byteSize = (ftell(file[ii])-1); // we get the position of the size byte
         printf("\nFound : 0x%x\n",byteSize);
         }
    }

Мы читаем весь файл и помещаем в буфер следующие символысравнить с базой (http://).

Моя проблема в том, что мы удалим printf ("\ n |% d (% c) -% d (% c)", buffer [ij], buffer [ij]), base [ij], base [ij]); ничего не найдено ...

Я действительно не вижу, что делаю неправильно.

Можете ли выпомогите мне?

Заранее спасибо.

1 Ответ

3 голосов
/ 26 июня 2011

Вы забыли обнулить буфер. В качестве альтернативы вы должны использовать memcmp вместо strcmp. Кроме того, код был бы намного понятнее, если бы вы использовали fread вместо цикла while.

...