Как проверить, находится ли строка в двоичном файле
Я делаю программу, которая получает два двоичных файла и проверяет, находится ли второй файл (строка) в первом файле. Я пытался использовать функцию 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-байтов