IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Problème de pointeurs


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Décembre 2005
    Messages
    105
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 105
    Par défaut Problème de pointeurs
    Bonjour,

    j'ai un petit problème de pointeurs.... (étonnant) et je ne comprends vraiment pas pourquoi ca ne marche pas.
    Pour résumer l'idée du code, je dois réaliser une pseudo bibliothèque et ajouter des ouvrages à celle-ci (ajouterEntree). Lors de l'ajout, il y a une mehode qui recherche si cet ouvrage existe deja (chercherFiche).

    Voici les deux methodes en question:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    void ajouterEntree(int type, char o_titre[],char o_dateEdition[], char o_commentaire[],  
                       char a_nom[], char a_prenom[], char a_commentaire[], char e_nom[], char e_adresse[]);
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Fiche *chercherFicheExistante(Classeur *classeur, char champ1[], char champ2[]);
    Lors de mes tests, j'ai utilisé la méthode ajouterEntree de la manière suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ajouterEntree(0, "toto", "d", "d", "d", "d", "d", "d");
    Tout marche très bien ainsi au final, ce sera l'utilisateur qui remplira les differents champs (sur la console). J'ai donc développé un menu et c'est la que tout va mal.

    J'ai voulu creer des variables globales pour les differents champs dont la valeur serait ecrasee à chaque fois qu'on ajoute un ouvrage.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    char o_titre[30];
    .........
    switch() {.......
                 printf(Saisissez le titre);
                 scanf("%s", o_titre);
                 ajouterEntree(0, o_titre, "d", "d", "d", "d", "d", "d");
    Et a chaque nouvel ajout d'un ouvrage, la nouvelle valeur ecrase l'ancienne mais partout, c'est a dire que la variable titre de l'ancien ouvrage prend celle
    du nouvel ouvrage.

    Je ne comprends pourquoi cela fait ca puisque normalement je passe la valeur
    que contient o_titre en argument d'ajouterEntree comme si je faisais "toto", non? Ainsi il n'y a pas de le contenu de o_titre a l'ajout suivant
    et ne devrait donc pas influer sur les ajoutrs precedents... enfin c'est ce que je croyais.


    Bon j'ai testé avec les pointeurs aussi, la ca marche si je les declare a l'interrieur du switch et pas en variables globales du fichier... encore une fois je ne comprends pas trop...

    Quelqu'un pourrait m'expliquer mon erreur s'il vous plait?

    Merci et bonne journée.

  2. #2
    Expert confirmé
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Par défaut
    laisse moi deviner... tu n'utilises pas strcpy dans ajouterEntree ?
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag :resolu: (en bas)

  3. #3
    Membre confirmé
    Inscrit en
    Décembre 2005
    Messages
    105
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 105
    Par défaut
    lol t'es trop fort, justement ca plante au moment d'un strcmp
    quand je recherche si la fiche existe deja mais c'est dans le cas ou j'utilise des pointeurs et que je les declare en variables globales.

    dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Fiche *chercherFicheExistante(Classeur *classeur, char champ1[], char champ2[])
    à un moment, je compare deux strings:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     if(strcmp(champ1, ficheScan -> EditeurPtr -> nom)==0) nom1=1;
    Qu'est ce qui ne va pas alors ? Pourquoi ca ne marche pas et comment régler ca proprement?

  4. #4
    Expert confirmé
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Par défaut
    justement, au lieu de faire des = comme tu le fais, tu devrais faire de strcpy [base de la base]

    sinon c'est l'adresse de la chaîne qui est copiée
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag :resolu: (en bas)

  5. #5
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void ajouterEntree(int type, char o_titre[],char o_dateEdition[], char o_commentaire[],char a_nom[], char a_prenom[], char a_commentaire[], char e_nom[], char e_adresse[]);
    Pour éviter le passage massif de paramètre on peut faire une structure:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    typedef struct la_structure{
    int type;
    char o_titre[];
    char o_dateEdition[];
    char o_commentaire[];
    char a_nom[];
    char a_prenom[];
    char a_commentaire[];
    char e_nom[];
    char e_adresse[];
    }* pointeur_sur_la_structure;

  6. #6
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    Ou plutôt:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    typedef struct la_structure{
    int type;
    char *o_titre;
    char *o_dateEdition;
    char *o_commentaire;
    char *a_nom;
    char *a_prenom;
    char *a_commentaire;
    char *e_nom;
    char *e_adresse;
    }* pointeur_sur_la_structure;
    Car la taille de la structure doit être connue à la compilation.

Discussions similaires

  1. Problème de pointeurs..embrouillé
    Par Frenchy dans le forum C++
    Réponses: 11
    Dernier message: 10/03/2005, 16h33
  2. Problème de pointeur avec un TQuery
    Par Oluha dans le forum Bases de données
    Réponses: 3
    Dernier message: 25/01/2005, 13h57
  3. Problème de pointeur
    Par toma_lille dans le forum C++
    Réponses: 1
    Dernier message: 07/12/2004, 21h26
  4. [MFC] Problème de pointeur !!
    Par acastor dans le forum MFC
    Réponses: 7
    Dernier message: 19/03/2004, 15h50
  5. TBitmap et problèmes de pointeurs...
    Par benj63 dans le forum C++Builder
    Réponses: 8
    Dernier message: 28/07/2003, 13h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo