2016-04-05 2 views
0

Мне нужно сравнить 2 символа с файловыми дескрипторами.сравнение символьных дескрипторов файлов c

мой файл sample.txt включает в себя «первым» мой файл sample2.txt включает в себя «firbbbbbbst»

Мне нужно вернуться «не похож», но он всегда возвращается «похожи» и никогда не читает строки в буфер.

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

Почему бы не использовать * strncmp *? http://en.cppreference.com/w/c/string/byte/strncmp – Louen

+0

это не проблема, проблема в том, что данные никогда не попадают в буфер – aviadm71

+3

Выбрасывайте '&' оператор при передаче 'buffer' и' buffer2' to 'fread'. –

ответ

1

Вы, вероятно, нужно это:

Отказ от ответственности: непроверенный код, который может не работать или даже компилировать, но он должен по крайней мере, дать вам идею. Во всяком случае, все еще есть возможности для улучшения.

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; 
} 

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