problème avec un tableau de structure !!!

problème avec un tableau de structure !!! - C - Programmation

Marsh Posté le 13-12-2010 à 22:09:01    

bonsoir à tous,
dans mon programme, je veux saisir une liste de données de type structure !
pour une seule saisie, le programme marche à merveille.
le problème c'est qu'au moment où j'introduis une boucle "for" à la fonction saisie....malgré que je n'ai au aucune erreur syntaxique...le programme ne simule pas et une fenêtre nommée "application error" surgit dans laquelle il y a le message suivant :
 
"

Citation :

projetc caused s stack in module projetc.exe at 000:0321. choose close. projetc will close.

"

Reply

Marsh Posté le 13-12-2010 à 22:09:01   

Reply

Marsh Posté le 13-12-2010 à 22:28:01    

La stack est la pile. Le message indique qu'elle devient corrompue. C'est sûrement dû à un problème classique tél que :
 
- un zéro binaire qui manquerait à la fin d'une chaine de caractères
- un indice de tableau hors des limites
- un scanf qui fait déborder
- une allocation d'un pointeur au lieu d'une allocation d'un buffer,
etc.

Reply

Marsh Posté le 13-12-2010 à 22:43:54    

j'ai pas bien compris ce que vous voulez dire par :
 
1-"un zéro binaire qui manquerait à la fin d'une chaine de caractères".
est ce que je dois ajouter un "\0" à la fin de chaque chaque de caractère ??? je croyais qu'il s'ajoutait tout seul :/
 
2- la limite de la boucle "for" est délimitée par un entier prédéfini précédemment.
 
3-"un scanf qui fait déborder".
le scanf est du genre : " scanf  ("%type",&(nom_structure[i].cham)); "
(le compteur "i" est pour la boucle "for" ).

Reply

Marsh Posté le 13-12-2010 à 23:41:38    

Citation :

1-"un zéro binaire qui manquerait à la fin d'une chaine de caractères".  
est ce que je dois ajouter un "\0" à la fin de chaque chaque de caractère ??? je croyais qu'il s'ajoutait tout seul :/  

Je n'ai pas dit à la fin de chaque caractère mais à la fin de chaque chaine de caractères, et j'ai employé le conditionnel parce que, sans voir le code, il est impossible de le savoir avec certitude. Le zéro binaire de fin de chaine n'est pas forcément présent, cela dépend des circonstances.
 

Citation :

3-"un scanf qui fait déborder".  
le scanf est du genre : " scanf  ("%type",&(nom_structure[ i].cham)); "


Ah, donc il y a un scanf(). Il vaut mieux les éviter et avoir des fgetc() de stdin à la place, ou des fgets(), mais vous n'avez peut-être pas encore appris cela. Un inconvénient du scanf(), est qu'il n'y aucune vérification des paramètres lors de la compilation car les paramètres peuvent avoir n'importe quel type. Un autre inconvénient est que l'utilisateur peut rentrer une chaine de caractères trop longue, par exemple il peut taper "abc" pour un champ défini en char champ[3];, et cela causera un débordement (car la taille de 3 est insuffisante étant donné qu'il faut prévoir une place pour le zéro binaire de fin de chaine).


Message édité par billgatesanonym le 13-12-2010 à 23:46:15
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed