2016-04-05 10 views
0

Ich muss 2 Zeichen aus Dateideskriptoren vergleichen.Vergleichen Char off Dateideskriptoren c

meine Datei sample.txt enthält „erste“ meine Datei Sample2.txt „firbbbbbbst“

Ich brauche enthält „nicht ähnlich“ zurückzukehren, aber es gibt immer „ähnlich“ und nie tatsächlich liest die Zeilen der Puffer.

int main(int argc, char **argv) 
{ 
ssize_t ret_in, ret_out; 
char buffer[BUF_SIZE]; 
char buffer2[BUF_SIZE]; 
int where=0;  
int fileDes1; 
int fileDes2; 

     fileDes1 = open("home/aviad/Desktop/comparing/in1/sample.txt", O_RDONLY); 
     fileDes2 = open("home/aviad/Desktop/comparing/in2/sample2.txt", O_RDONLY); 
     while((ret_in = fread (buffer, BUF_SIZE, 1, fileDes1)) > 0) 
     { 
      ret_out= fread (buffer, BUF_SIZE, 1, fileDes2); 

      if (buffer[where] == buffer2[where]) 
      { 
       printf("%c", buffer[where]); 
       where++; 
      } 
      else { 
       printf("nor similar\n"); 
       break; 
      } 
     } 
     printf("similar\n"); 
     printf("%c", buffer[2]); //garbage 
     printf("%c", buffer2[2]); //garbage 
     return 0; 
} 
+0

Warum nicht * strncmp * verwenden? http://en.cppreference.com/w/c/string/byte/strncmp – Louen

+0

Dies ist nicht das Problem, das Problem ist, dass Daten nie in den Puffer – aviadm71

+3

fallen Lassen Sie den '&' -Operator beim Übergeben von 'Puffer' und' Puffer2' zu 'fread'. –

Antwort

1

Sie müssen vermutlich diese:

Haftungsausschluss: ungetesteten Code, der nicht arbeiten kann oder sogar kompilieren, aber es sollte Ihnen eine Idee zumindest geben. Jedenfalls gibt es noch Raum für Verbesserungen.

int main(int argc, char **argv) 
{ 
ssize_t ret_in, ret_out; 
char buffer[BUF_SIZE]; 
char buffer2[BUF_SIZE]; 
int where=0;  
int fileDes1; 
int fileDes2; 
int notsimilar = 0; 
int i = 0; 

     fileDes1 = open("home/aviad/Desktop/comparing/in1/sample.txt", O_RDONLY); 
     fileDes2 = open("home/aviad/Desktop/comparing/in2/sample2.txt", O_RDONLY); 

     while((ret_in = fread (buffer, BUF_SIZE, 1, fileDes1)) > 0) 
     { 
     ret_out= fread (buffer, BUF_SIZE, 1, fileDes2); 

     if (ret_out != ret_in) // file sizes different -> not similar 
     { 
      notsimilar = 1; 
      break; 
     } 
     else 
     { 
      for (i = 0; i < ret_out) 
      { 
      if (buffer[i] == buffer2[i]) 
      { 
       printf("%c", buffer[i]); 
       where++; 
      } 
      else 
      { 
       notsimilar = 1; 
      } 
      } 
     } 
     } 

     if (notsimilar) 
     printf("similar\n"); 
     else 
     printf("similar\n"); 

     printf("%c", buffer[i]); 
     printf("%c", buffer2[i]); 
     return 0; 
} 

Sie sollten auch testen, ob die Dateien tatsächlich geöffnet werden können. Sie nehmen nur an, dass beide Dateien existieren.