2016-04-05 19 views
0

ファイル記述子から2つの文字を比較する必要があります。char offファイル記述子の比較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'を渡すときに '&'演算子を削除します。フリードに –

答えて

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

また、ファイルを実際に開くことができるかどうかをテストする必要があります。あなたは両方のファイルが存在すると仮定します。

関連する問題