Partage
  • Partager sur Facebook
  • Partager sur Twitter

Probleme avec pointeur / structure

    31 août 2007 à 16:00:33

    Salut les Zér0s, j'ai un problème avec le code suivant (il se situe à la dernière ligne, erreur: "incompatible types in assignements"):

    #include <stdio.h>
    #include <stdlib.h>

    typedef struct Personne Personne;

    struct Personne
    {
    char nom[100];
    char prenom[100];
    char adresse[1000];
    char age;
    };

    void modificateur (Personne *pointeur);

    int main()
    {
    Personne Joueur;

    printf("Prenom du joueur ?\n");
    scanf("%s", Joueur.prenom);
    Personne *pointeur = &Joueur;
    modificateur(&Joueur);
    printf("\n\nNouveau prenom: %s\n", (*pointeur).prenom);

    return 0;
    }

    void modificateur (Personne *pointeur)
    {
    char nouveauPrenom[100];
    printf("Nouveau Prenom ?\n");
    scanf("%s", nouveauPrenom);

    printf("%s", (*pointeur).prenom);
    (*pointeur).prenom = nouveauPrenom;
    }





    Je n'arrive pas à voir l'incompatibilité entre "(*pointeur).prenom" et "nouveauPrenom"...
    Merci pour votre aide!
    • Partager sur Facebook
    • Partager sur Twitter
      31 août 2007 à 16:04:30

      Tu ne peux pas faire d'égalités ou d'affectation sur un tableau statique.
      Dans ton cas, utilise strcpy :)

      Sinon, a titre informatif :

      (*truc).machin
      est équivalent à :
      truc->machin

      ce sera moins lourd :)
      • Partager sur Facebook
      • Partager sur Twitter

      Recueil de code C et C++  http://fvirtman.free.fr/recueil/index.html

        31 août 2007 à 18:04:18

        Ahhh....je commence à comprendre...
        J'avais oublié que les chaines de caractère étaient des tableaux...
        Merci beaucoup!

        Tiens, au fait: je viens de remarquer (après modification du code, qui maintenant marche) que strcpy marche sans avoir inclus <string.h>....alors que dans le Tuto il est écrit qu'il faut l'inclure...Savez-vous pourquoi?
        Je pense que la réponse est bete: strcpy est dans une autre librairie, comme stdlib...
        • Partager sur Facebook
        • Partager sur Twitter
          31 août 2007 à 19:31:59

          Citation : krookedking

          Tiens, au fait: je viens de remarquer (après modification du code, qui maintenant marche) que strcpy marche sans avoir inclus <string.h>....alors que dans le Tuto il est écrit qu'il faut l'inclure...Savez-vous pourquoi?


          A lire très attentivement et à comprendre absolument avant d'aller plus loin :

          1 - Je rappelle qu'un fichier d'en-tête (ou header : <xxx.h> ou "yyy.h") contient l'interface des fonctions (prototypes séparés) et non les fonctions elle-mêmes. Ce ne sont ni des 'librairies' (libraries), ni des bibliothèques. Si on t'a dit autre chose, c'est erroné.

          2 - Il est techniquement possible d'appeler une fonction sans déclaration préalables, mais le compilateur fera des hypothèses :

          - Le nombre de paramètre est indéterminé et de type int
          - Le type retourné est int.

          Si ce n'est pas la réalité, le comportement est indéterminé. C'est notamment le cas de strcpy() qui attend des char *, et qui seront convertis en int. Il est donc fortement recommandé de fournir au compilateur les moyens de générer le bon code (et de vérifier le nombre et le type des paramètres par la même occasion), c'est à dire les déclarations complètes des fonctions telles qu'elles se trouvent dans les headers adéquates :

          <stdio.h>, <stdlib.h>, <string.h> etc.

          3 - Il est fortement recommandé de configurer son compilateur pour qu'il prévienne en cas d'appel de fonction sans déclaration préalable (oubli de header, par exemple).

          http://mapage.noos.fr/emdel/codage.htm#cfg_compilo

          Compléments :

          http://mapage.noos.fr/emdel/notes.htm#production
          http://mapage.noos.fr/emdel/notes.htm#bibliotheque
          • Partager sur Facebook
          • Partager sur Twitter
          Music only !

          Probleme avec pointeur / structure

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown