C 以下代码有什么问题

C 以下代码有什么问题,c,malloc,md5,collision,fingerprint,C,Malloc,Md5,Collision,Fingerprint,以下函数从rabin_多项式结构中获取文件偏移量,打开用于生成md5指纹的input_文件,并将结果写入fpfile 我的问题是,它似乎有时使用相同的块缓冲区内容,而它会为具有不同长度的块生成类似的指纹 原因可能是什么 我已经分别使用其他输入测试了md5函数,它生成了正确的摘要 int write_rabin_fingerprints_to_binary_file(FILE *fpfile,FILE *input_file, struct rabin_polynomial *hea

以下函数从rabin_多项式结构中获取文件偏移量,打开用于生成md5指纹的input_文件,并将结果写入fpfile

我的问题是,它似乎有时使用相同的块缓冲区内容,而它会为具有不同长度的块生成类似的指纹

原因可能是什么

我已经分别使用其他输入测试了md5函数,它生成了正确的摘要

   int write_rabin_fingerprints_to_binary_file(FILE *fpfile,FILE *input_file,
    struct rabin_polynomial *head)
{        
    struct rabin_polynomial *poly=head;
    unsigned char fing_print[33]={'\0'};
    size_t bytes_read;
      while(poly != NULL)
        {    
       char *chunk_buffer;
       chunk_buffer = (char*) malloc ((poly->length));  
       bytes_read=fread (chunk_buffer,1, poly->length,input_file);          
               if(bytes_read!=poly->length)
                {
                   printf("Error reading from%s ",input_file);
                   return -1;
                }
       strncpy((char*)fing_print,md5(chunk_buffer).c_str(),32);     
       size_t ret_val=fprintf(fpfile, "%llu\t%lu\t%s\n",poly->start,
                                       poly->length,fing_print);

              if(ret_val == 0)
               {
                  fprintf(stderr, "Could not write rabin polynomials to file.");
                  return -1;
               }

         poly=poly->next_polynomial;
      free(chunk_buffer);
        }

   return 0;
}
编辑:

我正在使用visual studio 2010运行此程序。malloc()行中的char*类型转换是否会产生问题

读取的字节数与参数中指定的相同

int将拉宾指纹写入二进制文件(文件*fpfile,文件*输入文件
   int write_rabin_fingerprints_to_binary_file(FILE *fpfile,FILE *input_file
     , struct rabin_polynomial *head)
{        
    struct rabin_polynomial *poly;
    unsigned char fing_print[33];

    for (poly=head; poly != NULL;poly=poly->next_polynomial )   {    
       char *chunk_buffer;
       int retval;

       chunk_buffer = malloc (1+poly->length);  
       retval = fread (chunk_buf,1, poly->length,input_file);

            /* check retval here */

       chunk_buff[poly->length] = 0;     
       strncpy(fing_print,md5(chunk_buffer).c_str(), sizeof fing_print);
       fing_print[sizeof fing_print -1] = 0;
       retval = fprintf(fpfile, "%llu\t%lu\t%s\n"
                      ,poly->start, poly->length, fing_print);

              if(retval <= 0)
               {
                  fprintf(stderr, "Could not write rabin polynomials to file.");
                  return -1;
               }
        free(chunk_buffer);
        }

   return 0;
}
,结构rabin_多项式*头) { 结构拉宾多项式*poly; 未签名字符打印[33]; 对于(poly=head;poly!=NULL;poly=poly->next_多项式){ char*chunk\u缓冲区; 内部检索; chunk_buffer=malloc(1+poly->length); retval=fread(chunk\u buf,1,poly->length,输入文件); /*在这里检查retval*/ chunk_buff[poly->length]=0; strncpy(fing_print,md5(chunk_buffer).c_str(),fing_print的大小); fing_print[sizeof fing_print-1]=0; retval=fprintf(fpfile,“%llu\t%lu\t%s\n” ,多边形->开始,多边形->长度,打印);
如果(retval代码中没有任何错误导致此类错误。我刚刚发现,这是因为零长度字符串,也称为文件孔

您需要在某处检查fread的返回值