C: Comment stocker une chaîne dans une structure

J'ai donc une structure, et l'un de ses membres est une chaîne.

struct Output {
     char *axis;
     int value;
};
struct Output Jsoutput;

Ma question est, comment puis-je stocker une chaîne dans l'axe?

char whichaxis[4][3] = {"LX","LY","RY","RX"};
// Store which  axis and value of the joystick position in Jsoutput
Jsoutput.axis =  whichaxis[jse.number];
printf("%s\n",Jsoutput.axis);

I feel like there should be some & somewhere, but not sure where.

0
C'est un traitement d'événement, donc Jsoutput.axis sera remplacé par une nouvelle paire de caractères de whichaxis . whichaxis ne changera pas, et devrait rester établi.
ajouté l'auteur theoB610, source
Oh ok, désolé, mal compris. Dans ma boucle principale, il se passe des choses si Jsoutput.axis == "LX"
ajouté l'auteur theoB610, source
Quelle est la durée de vie de whichaxis ? Est-ce vraiment sur la pile comme ça? Avez-vous l'intention d'écrire sur la chaîne à axis ?
ajouté l'auteur Kevin, source
Vous allez donc réaffecter axis , mais jamais écrire, par ex. Jsoutput.axis [1] = 'x' ?
ajouté l'auteur Kevin, source

3 Réponses

Vous n'avez pas besoin de "stocker" la chaîne une seconde fois.

char whichaxis[4][3] = {"LX","LY","RY","RX"};

Stocke la chaîne

char *axis;

Dit "Je vais pointer sur une chaîne".

If you wanted a & in there, you could do:

Jsoutput.axis =  & (whichaxis[jse.number][0]) ;

Mais les concepteurs originaux de C étaient très pragmatiques et ont laissé les tableaux se transformer en pointeurs tout le temps pour plus de commodité. Voir Qu'est-ce que le tableau decaying pour plus de détails.

0
ajouté
Moi disant que je me sens comme il devrait y avoir un & était juste ce que je pensais que la solution serait.
ajouté l'auteur theoB610, source

You can copy a String with the function strcpy(destination, source)from string.h

see http://www.cplusplus.com/reference/cstring/strcpy/

Jsoutput.axis =  malloc(3);
strcpy(Jsoutput.axis,whichaxis[jse.number]);
0
ajouté
@Kevin Que voulez-vous dire "jeter le résultat de malloc"?
ajouté l'auteur theoB610, source
ok, donc la meilleure chose à faire est?
ajouté l'auteur theoB610, source
Et écris à tous ceux qui savent quoi, car il n'y a pas de mémoire à écrire.
ajouté l'auteur Kevin, source
Mieux, mais vous avez besoin d'un octet supplémentaire pour le '\ 0' , et vous ne devriez pas lancer le résultat de malloc.
ajouté l'auteur Kevin, source
@ theoB610 la bonne réponse dépend de ce que vous avez l'intention de faire avec whichaxis et axis . Voir mon commentaire sur la question.
ajouté l'auteur Kevin, source
Vous ne devriez pas lancer dans c. En c ++ vous devriez utiliser new à la place (bien que si vous utilisez malloc vous devez lancer). (cc @ theoB610)
ajouté l'auteur Kevin, source
ajouté l'auteur Florian Groetzner, source
il veut dire (char *) c'est un casting
ajouté l'auteur Florian Groetzner, source
Je ne sais pas parce que dans la refference ils utilisent un casting aussi
ajouté l'auteur Florian Groetzner, source

Il suffit d'utiliser strdup

Jsoutput.axis =  strdup(whichaxis[jse.number]);
0
ajouté
Est-ce que cela annule le besoin de malloc?
ajouté l'auteur theoB610, source
Oui strdup fait un malloc.
ajouté l'auteur woolstar, source