Bonsoir,
le programme suivant fait ce qui suit:
-
Recherche d’un segment de disque par son numéro puis l’afficher
2.recherche d’une chaîne dans le disque(trouver le numéro du disque)
Mais l’ors de l’appel de la procédure de recherche de la chaîne j’ai cette erreur:“erreur de segmentation” j’ai essayé plusieurs déclarations de variables …mais j’ai toujours la même erreur
voici le code:int tailleTabResultat;
char *Lire_secteur(int Num_sect) { printf("\n dans la fonction lecture_secteur"); char *tampon;//[tailleBuffeur]; int i=0; tampon = malloc(sizeof(char)*512); FILE *disque=fopen("/dev/sda","r"); if(disque!=NULL) { fseek(disque, Num_sect*512, SEEK_SET); for(i=0; i<512; i++) { tampon[i]=getc(disque); } fclose(disque); } return tampon; }
void Afficher_Secteur(int Num_sect)
{
char *tampon;
int i,j;
j=0;
tampon=Lire_secteur(Num_sect);
system(“clear”);
for(i=0; i<512; i++)
{if(i%16==0) { if(j==0)printf("\n0000 "); else if(j<100)printf("\n00%d ",j); else printf("\n0%d ",j); j=j+16; } printf("%2.2hhx ",tampon[i]); } pri=ntf("\n");s
}
//--------------la recherche
void ChaineVersOctet(char *chaine,char *chaineOctet,int *nbOctets)
{
char c[2];
nbOctets=strlen(chaine)/2;
int i=0,j=0,cpt=strlen(chaine)/2;
majusculeChaine(chaine);
printf("\n dans la fonction chaineversoctet majusculechaine est %s",chaine);
while(i<cpt)
{
//
c[0]=chaine[j];
j++;
c[1]=chaine[j];
j++;
chaineOctet[i]=HexaVersEntier©;
printf("\n chaineoctetde i = %2.2hhx ",chaineOctet[i]);i++; }
}
char majusCaract(char c)
{
char a;
if(c<103 && c>96) a=c-32;
else a=c;
return a;}
void majusculeChaine(char *chaine)
{
int i=0;
for(i=0; i<strlen(chaine); i++)
{
chaine[i]=majusCaract(chaine[i]);
printf("%c", chaine[i]);
}
}int HexaVersEntier(char tab[2])
{
int entier=0; if(tab[1]>47 && tab[1]<58)entier = tab[1]-48; else entier = tab[1]-55; if(tab[0]>47 && tab[0]<58)entier+=(tab[0]-48)*16; else entier+=(tab[0]-55)*16; return entier;
}
int *Rechercher_secteur(char * chaine_info,int secteur_debut,int secteur_fin)
{
printf("\n\n dans la fonction de rechrche ");char chaineOctet[512]; int longueurChaineOctet; char *tampon; int nbSecteurs=0,numSecteur=secteur_debut,*tabResultat=NULL,i=0,j=0,tmp=0,continuer=1,stop=0; ChaineVersOctet(chaine_info,chaineOctet,&longueurChaineOctet); printf("\nLa chaine apres vers octet est : %2.2hhx ",chaineOctet); tabResultat=malloc(sizeof(int)*(secteur_fin-secteur_debut+1)); while(numSecteur<=secteur_fin) { tampon=Lire_secteur(numSecteur); i=0; j=0; continuer=1; while(i<512 && continuer==1) { j=0; if(tampon[i]==chaineOctet[j]) { printf("\n ha carac trouvé est: %d ",tampon[i]); tmp=i; tmp++; j++; stop=0; while(tmp <512 && j<longueurChaineOctet && stop==0) { if(tampon[tmp]==chaineOctet[j]) { printf("\n ha carac trouvé est: %2.2hhx ",tampon[tmp]); tmp ++; j++; } else { stop = 1; j=0; i++; } } if(tmp <=512 && j==longueurChaineOctet) { continuer=0; tabResultat[nbSecteurs]=numSecteur; nbSecteurs++; } } else i++; } numSecteur++; } tailleTabResultat=nbSecteurs; return tabResultat;
}
void AffichTabResRech(int *tabRes)
{printf("\n\n\tResultat de recherche : \n"); int i=0; for(i=0; i<tailleTabResultat; i++) { printf("\n Numero du secteur :"); printf(" %d ",tabRes[i]); } if (tailleTabResultat==0)printf("\n\n\t La chaine recherchee non trouvee .\n\n");
}
int main( )
{char *Tampon; int Num_sect,nbSect; int *tabResRech; char chaineRech[1024];
printf("\l’affichage de secteur numero1");
Afficher_Secteur(1);
printf(“Recherche de la chaine: 24ad”);
tabResRech=Rechercher_secteur(“24ad”,1,1)
AffichTabResRech(tabResRech);
return 0;
}
Remarque: j’ai pas utilisé des scanf pour éviter la même erreur !
Merci d’avance
Cordialement