problème dans une fonction en C

a marqué ce sujet comme résolu.

j’ai ce code là

char* construit_prof(int mat)
{  
    char* d;char* d2;char* e=malloc(3*sizeof(char));char* s=malloc(6*sizeof(char)); int l,anne1,anne2;
    itoa(mat,s,10);
    strcat(s,"#");
    strcat(s,Nom_Prenom());
    strcat(s,"#");
    strcat(s,Nom_Prenom());strcat(s,"#");
    d=Date(1953,1993,&anne1);
    d2=Date(1980,2019,&anne2);
    while(anne2<anne1+25)
    {d2=Date(1980,2019,&anne2);}
    strcat(s,d);strcat(s,"#");
    strcat(s,Wilaya_naissance());strcat(s,"#");
    strcat(s,Sexe());strcat(s,"#");
    strcat(s,Grp_S());strcat(s,"#");
    strcat(s,d2);strcat(s,"#");
    strcat(s,Grade());strcat(s,"#");
    strcat(s,specialite());strcat(s,"#");
    strcat(s,Dernier_diplome());strcat(s,"#");
    strcat(s,etabliss());strcat(s,"#");
    l=1+strlen(s);
    itoa(l,e,10);
    strcat(e,"n");strcat(e,"#");
    strcat(e,s);
    return e;
}

mais quand j’essaie d’éxécuter cette boucle

for(cpt=0;cpt<=100;cpt++)
 { 
   printf("avant construit prof");
   char* prof=construit_prof(Matricule());
   printf("%d_%s \n",cpt,prof);

 }

elle s’arrète a la 3ème itération. j’ai besoin d’aide SVP.

On ne voit pas grand chose des différentes fonctions appelées, mais rien qu’avec les dièses tu dépasses la taille allouée pour ta chaîne s. Pourquoi 6 d’ailleurs ?

Par ailleurs, pour prévenir ce genre de choses, tu devrais éviter les fonctions comme strcat qui ne permettent pas de limiter la taille de la copie.

dans l’ensemble, toutes les tailles allouées via les malloc sont beaucoup trop faibles.

    strcat(e,"n");strcat(e,"#");
    strcat(e,s);

ici, tu écris dans e : "n", "#", et le contenu de s. Au niveau de tes malloc, pourquoi e est plus petit que s ? Il devrait faire, au minimum, la taille de s + 2.

Pareil pour s, regardes et comptes la quantité de données écrites dedans. Tu es sur que ça rentre dans 6 octets ?

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte