Сравните каждый 1kb содержимого двух файлов вместо символа за символом - PullRequest
6 голосов
/ 07 мая 2019

У меня есть эта функция, которая сравнивает символы из 2 файлов и отображает найденные ошибки (строка + позиция).

 void compareFiles(FILE *fp1, FILE *fp2) 
 { 
    char ch1 = getc(fp1); 
    char ch2 = getc(fp2); 
    int error = 0, pos = 0, line = 1; 

    while (ch1 != EOF && ch2 != EOF) 
    { 
        pos++; 

        if (ch1 == '\n' && ch2 == '\n') 
        { 
            line++; 
            pos = 0; 
        } 

        if (ch1 != ch2) 
        { 
            error++; 
            printf("Line Number : %d \tError"
               " Position : %d \n", line, pos); 
        } 

        ch1 = getc(fp1); 
        ch2 = getc(fp2); 
    } 

    printf("Total Errors : %d\t", error); 

Но я бы хотел взять каждый 1 КБ данных и сравнить его с другим из файла file2, потому что тогда я хочу посмотреть, сколько таких блоков одинаково. Как мне это сделать?

1 Ответ

3 голосов
/ 07 мая 2019

Читается кусками, поэтому fread не getc.

Затем сравните в кусках, так что strcmp (или memcmp) не символ ==.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...