strcmp ведет себя странно

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

Например, мы будем искать «http://» в «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]); ничего не найдено...

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

Вы можете помочь мне ?

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


person MisterDoy    schedule 26.06.2011    source источник


Ответы (1)


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

person zvrba    schedule 26.06.2011
comment
Спасибо. Это было так... просто. Не знаю, почему я этого не видел. - person MisterDoy; 26.06.2011