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 char dans un pointeur de structure


Sujet :

C

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2013
    Messages : 90
    Points : 69
    Points
    69
    Par défaut Problème de char dans un pointeur de structure
    Bonjour à tous

    Je viens vers vous car j'ai un petit soucis avec mon code actuel, je suis en train de coder un petit RPG en mode console histoire de passer le temps la journée (et aussi pour bien maitriser les bases du C avant de m'attaquer à SDL). Bref jusque là aucuns soucis, j'ai la base de mon code qui fonctionne sans problème, on peut voyager d'une région à l'autre et tout et tout.

    Mon soucis arrive au moment où je souhaite généré un monstre aléatoirement pendant notre voyage. Pour celà j'ai une fonction "genererMonstre" avec un pointeur de structure en paramètre, pour générer les stats du monstres (via, attaque, defense et compagnie) aucun problème, le soucis est pour attribuer un nom à mon monstre. A la compilation j'ai une belle erreur incompatible types when assigning to type 'char[20]' from type 'char *'. J'ai essayer de retourner le soucis dans plusieurs sens, y'a rien à faire j'arrive pas à résoudre ce problème :/

    Si quelqu'un pouvait m'aiguiller ça serait vraiment sympa !

    Voici le code concernant la génération du monstre : (J'ai mis en gras la ligne qui pose problème)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    #define VIE_MAX_MONSTRE 500
    #define VIE_MIN_MONSTRE 100
    #define FORCE_MAX_MONSTRE 30
    #define FORCE_MIN_MONSTRE 5
    #define DEFENSE_MAX_MONSTRE 60
    #define DEFENSE_MIN_MONSTRE 20
    
    #include <time.h>
    
    #include "monstres.h"
    
    void genererMonstre(Monstre *monstre){
        srand(time(NULL));
    
        // Le monstre est créé aléatoirement
        monstre -> nom = "Gobelin";
        monstre -> vie = (rand() % (VIE_MAX_MONSTRE - VIE_MIN_MONSTRE + 1)) + VIE_MIN_MONSTRE;
        monstre -> vieMax = monstre -> vie;
        monstre -> force = (rand() % (FORCE_MAX_MONSTRE - FORCE_MIN_MONSTRE + 1)) + FORCE_MIN_MONSTRE;
        monstre -> defense = (rand() % (DEFENSE_MAX_MONSTRE - DEFENSE_MIN_MONSTRE + 1)) + DEFENSE_MIN_MONSTRE;
    }
    Merci d'avance !

  2. #2
    Membre expert
    Avatar de Metalman
    Homme Profil pro
    Enseignant-Chercheur
    Inscrit en
    Juin 2005
    Messages
    1 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Enseignant-Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 049
    Points : 3 528
    Points
    3 528
    Par défaut
    Il faut faire un strcpy depuis le char* vers le char[20] !

    Et je te conseille même de faire un strncpy avec la taille 20 au max...

    Et n'oublie pas de TOUJOURS terminer par un '\0' ! (donc tes noms feront 19 caractères au plus !)

    EDIT : Et j'oubliais l'explication : char[20] est un tableau de caractères alloué à la compilation...
    Tandis que char* est un pointeur vers un ou des caractères... alloués à l'exécution !
    Il est probable que tu préfères mettre dans ta structure un char* pour mettre des noms un peu plus longs que 20 caractères... (mais peut être es-tu limité par une taille, et donc ton char[20] est justifié ! )

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2013
    Messages : 90
    Points : 69
    Points
    69
    Par défaut
    Effectivement maintenant ça fonctionne nickel ! C'était vraiment tout bête comme solution, merci beaucoup

    EDIT : Effectivement j'ai limité moi-même la taille à 20 caractères dans la structure, plus tard je compte faire une liste de nom définie pour les monstres via une enumeration et je trouve que 20 caractères maximum c'est largement assez

  4. #4
    Membre expert
    Avatar de Metalman
    Homme Profil pro
    Enseignant-Chercheur
    Inscrit en
    Juin 2005
    Messages
    1 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Enseignant-Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 049
    Points : 3 528
    Points
    3 528
    Par défaut
    Bon bah tout s'explique...

    Tu n'auras qu'à faire une fonction de génération de noms, et tu lui donneras en paramètre ton char[20] (sous forme de char*) pour le remplir de caractères avec le strncpy.


    PS : Et oublie pas de cliquer sur résolu en bas !

  5. #5
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2013
    Messages : 90
    Points : 69
    Points
    69
    Par défaut
    Merci de l'information

    PS : Et merci de m'avoir indique l'emplacement du bouton résolu, ça fait 10 minutes que je cherche partout après... :p

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 7
    Dernier message: 04/12/2012, 19h02
  2. Problème de Char dans une structure
    Par BRK__ dans le forum Débuter
    Réponses: 7
    Dernier message: 07/10/2010, 20h14
  3. Ajout char dans adresse pointeur
    Par guitz dans le forum Débuter
    Réponses: 12
    Dernier message: 18/10/2009, 22h15
  4. Réponses: 11
    Dernier message: 03/11/2006, 23h53
  5. Réponses: 6
    Dernier message: 27/10/2006, 14h27

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