[c] associer une chaîne à une structure ?

Fermé
oopin Messages postés 25 Date d'inscription vendredi 26 octobre 2007 Statut Membre Dernière intervention 7 juin 2011 - 1 avril 2009 à 01:54
 loupius - 1 avril 2009 à 20:09
Bonjour,

Je travail sur un TP de c ou je doit remplir une structure qui contient un tableau :
typedef struct
{
	char nom[TAILLE_NOM+1] ;
	int numJoueur;             // numero du joueur = indice dans table tj de SHM_JOUEUR
	int nbPionCrt;             // nombre de pion restant au joueur
	int score;                 // score courant du joueur
	int couleur;           // couleur des pions du joueur
} JOUEUR ;


TAILLE_NOM étant un de mes defines.

J'essai donc de faire :


JOUEUR * player;
*(( char * )(player->nom)) =  nom_joueur ;
// ou 
player->nom = "coucou";
// ou bien d'autre mais il me sort dans presque tous les cas une erreur de segmentation.


Si quelqu'un a la solution, ça m'aiderai beaucoup.

Merci

oopinou

4 réponses

oopin Messages postés 25 Date d'inscription vendredi 26 octobre 2007 Statut Membre Dernière intervention 7 juin 2011 1
1 avril 2009 à 02:04
En fait j'ai fait :
*(( char * )(player->nom)) =  nom_joueur ;


et ça a l'air de passer pas trop mal, j'ai fait ca en ctrl Z et pourtant ca ne marchait pas il y a 10 minutes :(

Par contre à la compilation j'ai un warning sur cette ligne :
dmr.c:136: attention : assignment makes integer from pointer without a cast

quand j'arrive à l'enlever, mon code me fait une erreure de segmentation

Des idées ?

Merci d'avance
0
L'éternel même problème: quand il y a un problème de segmentation, dans 99,99% des cas c'est un problème de mauvaise ou de non initialisation de pointeur.
Et, ici, c'est encore le cas !!!
Tu nous écris:
JOUEUR * player;
*(( char * )(player->nom)) = nom_joueur ;

Tu utilises un pointeur non initialisé!
Il faut au moins faire: player = (JOUEUR*)malloc(sizeof(JOUEUR));
Tout ne sera peut-être pas résolu, mais tu sera sur la bonne voie.
0
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
1 avril 2009 à 11:13
Salut.
En effet allouer de la place pour joueur est la première chose à faire.
D'ailleurs, mauvaise idée le nom tout en majuscule, en général on réserve les noms en capitale pour les macros)
Sinon, révise tes cours de tableaux, tu ne peux pas modifier l'adresse d'un tableau, car ce n'est pas un pointeur.
Si tu veux faire une assignation, il faut utiliser strcpy().
0
oopin Messages postés 25 Date d'inscription vendredi 26 octobre 2007 Statut Membre Dernière intervention 7 juin 2011 1
1 avril 2009 à 16:55
Merci pour vos réponse, je vais essayé ça de ce pas.
J'avou ne pas être encore très à l'aise avec les pointeurs, mais ça viens doucement.
J'avais bien essayé le strcpy() mais sans le malloc ca ne passait pas.

Après essai : ça marche, merci à vous deux ;)

En ce qui concerne les noms en majuscule, c'est imposé par notre prof malheureusement :'(
0
Char Snipeur a évidemment raison ;-) Il ne fau(drai)t pas utiliser les noms tout en majuscules pour les noms de classes ou de structures: la règle (non obligatoire (évidemment on peut faire ce que l'on veut) mais quasiment toujours appliquée) est 'les mots collés avec la première lettre en majuscule', par exemple: 'JoueurDebutant', 'JoueurComfirmé', 'JoueurExpert'.
Tu n'est pas obligé de tirer l'oreille de ton prof (d'ailleurs je te le déconseille fortement), mais, sans le frustrer, si tu pouvais lui en glisser un mot... ce serait, en faisant prendre de bonnes habitudes, rendre service à toute une classe.
Bon courage.
0