我想读取一个目录中的文件,检查它们是否为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/