分段故障(核心转储)fread功能

Min*_*nis 0 c file

我想读取目录中的文件,检查它们是否是ELF类型并打印这些文件的10个第一个字节.问题是fread(buffer,1,4,f1);符合的.在第一次循环迭代中,一切正常,但在第二次迭代时会弹出这个错误:"segmentation Fault(core dumped)".有谁知道为什么在这种情况下出现这个错误?我知道有很多与此问题相关的问题,但我找不到答案

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 );
Run Code Online (Sandbox Code Playgroud)

}

Ser*_*rov 5

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