peyrouz | Bonjour,
Pour les besoisn d'un projet j'ai créé un type pile dans lequel je stoke des chaines de caracteres et le nombre de fois où elles apparaissent dans un fichier.
Je viens de me rendre compte que lorsque je rentre une chaine trop longue elle est ensuite coupée, lors de l'ajout d'une nouvelle...
Le type pile (extrait de pile.h)
Code :
- typedef struct
- {
- int valeur;
- char *token;
- struct pile *prec;
- } pile ;
|
Fichier pile.c
Code :
- #include <stdlib.h>
- #include <stdio.h>
- #include <string.h>
- #include "pile.h"
- /*************************************************************************/
- void insererElement(pile **p, char *t)
- {
- pile *suiv = malloc(sizeof(pile));
- pile *present;
- if(!suiv) return; /* Si l'allocation a échouée. */
- if ((present=existe(*p, t)) != NULL ){
- incrementerElement(present);
- }else{
- suiv->token = malloc(sizeof(char));
- strcpy(suiv->token, t);
- suiv->valeur = 1;
- suiv->prec = *p;
- *p = suiv; /* Le pointeur pointe sur le dernier élément. */
- }
- }
- /*************************************************************************/
- pile* existe(pile *p, char *t)
- {
- while(p){
- if(strcmp((p)->token,t)==0) return p;
- p = p->prec;
- }
- return NULL;
- }
- /*************************************************************************/
- void incrementerElement(pile *p)
- {
- (p)->valeur = (p)->valeur +1;
- }
- /*************************************************************************/
- int obtenirTotal(pile *p)
- {
- int total = 0;
- while(p){
- total = total + p->valeur;
- p = p->prec;
- }
- return total;
- }
- /*************************************************************************/
- int obtenirNbApparition(pile *p, char *t)
- {
- pile *present;
- if ((present=existe(p, t)) != NULL )
- return ((present)->valeur);
- else
- return 0;
- }
- /*************************************************************************/
- void afficherElements(pile *p)
- {
- while(p){
- printf("\n%s : %d\n", p->token, p->valeur);
- p = p->prec;
- }
- }
- /*************************************************************************/
- void viderPile(pile **p)
- {
- pile *tmp;
- while(*p)
- {
- tmp = (*p)->prec;
- free(*p);
- *p = tmp;
- }
- }
|
fichier main.c
Code :
- #include <stdlib.h>
- #include <stdio.h>
- #include "pile.h"
- int main()
- {
- pile *MaPile = NULL; /* Impératif de l'initialiser à NULL */
- char *chaine = malloc(sizeof(char));
- strcpy(chaine,"test" );
- insererElement(&MaPile, chaine);
- insererElement(&MaPile, "pouet" );
- insererElement(&MaPile, "pouetfghfhjfhgftyffhgvjhkbuyrtydhfcjguyfyf" );
- insererElement(&MaPile, "pouetfghfhjfhgftyffhgvjhkbuyrtydhfcjguyfyf" );
- insererElement(&MaPile, "pouetfghfhjfhgftyffhgvjhkbuyrtydhfcjguyfyf" );
- insererElement(&MaPile, "pouetfghfhjfhgftyffhgvjhkbuyrtydhfcjguyfyf" );
- afficherElements(MaPile);
|
et l'affichage resultant :
pouetfghfhjfhgftyffhgvjhkbuyrtydhfcjguyfyf : 1
pouetfghfhjf : 1
pouetfghfhjf : 1
pouetfghfhjf : 1
pouet : 1
test : 1
Je continue à chercher dans mon code d'où peut venir l'erreur, mais peut etre qu'un oeil exterieur trouvera plus rapidement...
Je vous remercie d'avance |