Euh là y a une double erreur, je pense :
return saisie;
free(saisie);
* un return provoque le retour direct donc le free n'est jamais executé
* Il ne faut pas libérer la zone mémoire si tu la retournes, malheureux
* tu reserves l'espace dans la structure puis tu la reserves dans la fonction => c'est pas logique => tu fais 2 fois un free sur un pointeur d'où la fameuse "segmentation fault"
* aucune vérif sur la taille des chaines (mais ça tu comptes peut être l'ajouter plus tard) => "spabien"
(Je corrige de tête, j'ai pas de compilo sous la main)
Code :
- char* fonc_saisie(char* chaineReservee)
- {
- scanf("%s",chaineReservee);
- char* ptr = chaineReservee;
- while(*ptr != 0) {
- *ptr = tolower(*ptr);
- ptr++;
- }
- printf("Nouvelle chaine : %s",chaineReservee);
- return chaineReservee; // même pas utile en fait
- }
- // le reste est ok sauf pour chaque appel à fonc_saisie :
- printf("\nentrez le nom\n" );
- fonc_saisie(mac.nom);
|
Ok ?
Message édité par smaragdus le 18-07-2002 à 02:02:24