Aide sur un programme C++

Résolu/Fermé
jihane jihane Messages postés 65 Date d'inscription samedi 29 octobre 2011 Statut Membre Dernière intervention 11 avril 2012 - 23 nov. 2011 à 18:05
jihane jihane Messages postés 65 Date d'inscription samedi 29 octobre 2011 Statut Membre Dernière intervention 11 avril 2012 - 24 nov. 2011 à 09:52
Bonjour,
svp j'ai deux fonction avec leurs définition mais j'ai rien compris dans leurs défenition
est ce que quelqu'un peut m'aide svp

etudiant::etudiant(char * n,char *p, int a, int nb):personne(n,p,a){
nbre=nb;
matiers=new char*[nb*sizeof (char*)];*********************
notes=new float[nb];
}


void etudiant::saisi(){
static char * buff;**************************
buff=new char [100];***********************
for (int i=0;i<nbre;i++){

cout<<"entrer la "<< i + 1 << "eme matiers "<<endl;
cin>>buff;
*(matiers+i)=new cha[strlen(buff)+1];******************************
strcpy(*(matiers + i), buff);************************
cout << "entrer la note de la matiers "<<i +1 <<endl;
cin>>*(notes + i);
}
}


j'ai pas compris les linge où j'ai met des ************
merci d'avance

5 réponses

Pacorabanix Messages postés 3248 Date d'inscription jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013 660
23 nov. 2011 à 19:06
matiers=new char*[nb*sizeof (char*)];********************* 


cette ligne crée un tableau de chaine de caractère, de taille nb.

une chaine de caractère est un char *, un char*[] est un tableau de chaine

j'ai quand même l'impression qu'il y a une "erreur" bénigne : il faudrait juste nb dans les crochets pour créer un tableau avec nb éléments, pas besoin du nb * sizeof(char*)
1
Pacorabanix Messages postés 3248 Date d'inscription jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013 660
23 nov. 2011 à 19:07
static char * buff;************************** 


là j'ai beaucoup de mal à comprendre pourquoi la variable buff est déclarée static.
1
Pacorabanix Messages postés 3248 Date d'inscription jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013 660
23 nov. 2011 à 19:09
buff=new char [100];*********************** 


ici on crée un nouveau tableau en mémoire dynamiquement.

je ne comprends pas pourquoi on le déclare ici avec new, il n'y en a pas besoin.

un simple char buff[100] aurait été suffisant.

d'autre part, il n'y a pas de "delete" qui supprimes cette espace mémoire réservé, donc une erreur qui ne cause pas de crash visible, mais qui rend le programme pas bon du tout ! (fuite de mémoire!)
1
Pacorabanix Messages postés 3248 Date d'inscription jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013 660
23 nov. 2011 à 19:11
*(matiers+i)=new cha[strlen(buff)+1];****************************** 


c'est comme :

matiers[i] = new cha[strlen(buff)+1];****************************** 


on alloue chaque case du tableau "matiers" dynamiquement. (Ici c'est justifié).

Si tu nên comprends pas plus, il faut lire un cours sur les chaines de caractères et les tableaux de chaine.
1
Pacorabanix Messages postés 3248 Date d'inscription jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013 660
Modifié par Pacorabanix le 23/11/2011 à 19:12
il manque des "r" :

c'est new char[...]

que tu voulais écrire, non ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Pacorabanix Messages postés 3248 Date d'inscription jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013 660
Modifié par Pacorabanix le 23/11/2011 à 19:13
strcpy(*(matiers + i), buff);************************ 


regarde l'aide de la fonction....
http://www.cplusplus.com/reference/cstring/strcpy/
1
jihane jihane Messages postés 65 Date d'inscription samedi 29 octobre 2011 Statut Membre Dernière intervention 11 avril 2012
24 nov. 2011 à 09:52
Merci bien pour l'aide maintenant j'ai compris le programme :)
0