Как проверить, находится ли строка в двоичном файле

Я делаю программу, которая получает два двоичных файла и проверяет, находится ли второй файл (строка) в первом файле. Я пытался использовать функцию strstr, но она не работает. Это та часть моего кода: я читаю файлы правильно?

    fseek(fileToCheckv, 0 , SEEK_END);
    size = ftell(fileToCheckv);
    rewind(fileToCheckv);
    fseek(virusSignit, 0L, SEEK_END);
    vsize = ftell(virusSignit);
    rewind(virusSignit);
    buffer = (char*)realloc(buffer, size+1 * sizeof(char));
    virusSig = (char*)realloc(virusSig, vsize+1 * sizeof(char));
    buffer[size] = 0;
    virusSig[vsize] = 0;
    fread(buffer,1 , size, fileToCheckv);
    fread(virusSig,1 ,vsize, virusSignit);
    result = strstr(buffer, virusSig);
    if (result != NULL)
    {
        printf("\nVirus was found in file: %s\n", fileToOpen);
    }
    else
    {
        printf("The virus was not found\n");
    }

1 ответ

Вы открываете файлы правильно, но у вас есть другие незначительные проблемы:

  • buffer = (char*)realloc(buffer, size+1 * sizeof(char));, Вы, вероятно, хотели сделать (size+1) * sizeof(char) просто size+1 так как sizeof(char) будет всегда 1. Эта проблема встречается дважды в вашем коде
  • В той же строке вы используете realloc без проверки, если указатель равен NULL. Это может оказаться проблематичным, если ваше распределение не удается
  • Как сказал @Michael Walz, strstr() предназначен для строк, заканчивающихся NUL, поэтому для двоичного файла вы должны либо создать свой собственный strstr-подобная функция для двоичного кода, или убедитесь, что в ваших строках нет NUL-байтов
Другие вопросы по тегам