[c] associer une chaîne à une structure ?
oopin
Messages postés
25
Date d'inscription
Statut
Membre
Dernière intervention
-
loupius -
loupius -
Bonjour,
Je travail sur un TP de c ou je doit remplir une structure qui contient un tableau :
TAILLE_NOM étant un de mes defines.
J'essai donc de faire :
Si quelqu'un a la solution, ça m'aiderai beaucoup.
Merci
oopinou
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
A voir également:
- [c] associer une chaîne à une structure ?
- Associer chromecast - Guide
- Chaine tnt gratuite sur mobile - Guide
- Logiciel calcul structure bois gratuit - Télécharger - Architecture & Déco
- Chaine radio - Télécharger - Médias et Actualité
- Plus de chaine tv - Guide
4 réponses
En fait j'ai fait :
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
*(( 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
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.
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.
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().
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().
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 :'(
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 :'(
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.
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.