我想读取一个目录中的文件,检查它们是否为ELF类型,并打印这些文件的前10个字节。问题出在fread(buffer,1,4,f1);行。在第一次while循环迭代中,一切正常,但在第二次迭代中,这个错误弹出:“分段错误(核心转储)”。有人知道为什么这个错误会出现在这个案例中吗?我知道有很多问题和这个问题有关,但我找不到答案

while ((pDirent = readdir(pDir))!= NULL){
       void *dl;
       dl = dlopen( pDirent->d_name, RTLD_LAZY | RTLD_LOCAL );

       if(dl != NULL){
          printf("Failo vardas %s tai yra dinamine biblioteka \n",pDirent->d_name);

       }else{
          char buffer[4];
          FILE *f1;
          f1 = fopen(pDirent->d_name, "r" );   
          fread(buffer,1,4,f1);
          if(buffer[0] == 0x7f && buffer[1] == 'E' && buffer[2] == 'L' && buffer[3] =='F'){
             printf("%s sis failas nera dinamine biblioteka, tai yra ELF failas \n",pDirent->d_name);
          }
          fclose(f1);
          FILE *f2;
          f2 = fopen(pDirent->d_name, "r" );
          char buf[10];
          fread(buf,1,10,f2);
          printf("%s file 10 baitu : %s \n",pDirent->d_name,buf);
          fclose(f2);
       }
       dlclose( dl );

}

最佳答案

buf不是以空结尾的,因此用%s打印它是一种未定义的行为。

关于c - 分段故障(核心转储)读取功能,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43849645/

10-11 21:19