2017-06-06 1 views
-4

Ich weiß nicht, warum dieser Code nicht funktioniert.Suchen Muster in Binärdatei/Finde Übereinstimmung in Binärdatei (C)

while (TRUE) 
{ 
    do 
    { 
     fread(buffer1, BUFFER_LEN - 1, 1, pFile); 
     fread(buffer2, BUFFER_LEN - 1, 1, pVirus); 
     if (feof(pVirus)) 
     { 
      printf("MATCH!\n"); 
      flag = 1; 
      break; 
     } 
    } while (strcmp(buffer1, buffer2) == 0); 

    if (buffer1 != buffer2) 
    { 
     rewind(pVirus); 
    } 

    if (feof(pFile) || flag == 1) 
    { 
     break; 
    } 
} 

fclose(pFile); 
fclose(pVirus); 

Der Code findet in kleiner Datei in größerer Datei den Code nicht funktioniert.

+1

schlägt der Vergleich des Speichers mit 'strcmp' fehl, wenn Nullen darin enthalten sind. –

+0

Wie soll ich vergleichen? – Justeton

+2

Google oder man memcmp – ThingyWotsit

Antwort

0

die folgenden vorgeschlagenen Code:

  1. führt die gewünschte Funktion
  2. kann nicht sagen, es kompiliert sauber wie die OPs Code geschrieben ist, nicht komplett
  3. wird seg nicht

Fehler und jetzt der vorgeschlagene Code:

rewind(pFile); 
    do 
    { 
     size_t buf1Count = fread(buffer1, 1, BUFFER_LEN, pFile); 
     if(!buf1Count) 
     { 
      if(feof(pFile)) 
      { // reached end of pFile 
       ??? 
       break; 
      } 

      else 
      { // error event 
       perror("fread of pFile failed"); 
       fclose(pFile); 
       fclose(pVirus); 
       exit(EXIT_FAILURE); 
      } 
     } 

     rewind(pVirus); 
     do 
     { 
      size_t buf2Count = fread(buffer2, 1, BUFFER_LEN, pVirus); 

      if(!buf2Count) 
      { 
       if(feof(pVirus)) 
       { // reached end of pVirus 
        printf("NO MATCH\n"); 
        break; 
       } 

       else 
       { // error event 
        perror("fread of pVirus failed"); 
        fclose(pFile); 
        fclose(pVirus); 
        exit(EXIT_FAILURE); 
       } 
      } 

      if(memcmp(buffer1, buffer2, buf1Count) == 0) 
      { 
       printf("MATCH\n"); 
       break; 
      } 
     } while(1); 
    } while (1); 

    fclose(pFile); 
    fclose(pVirus);