Comment accéder aux membres d’une `struct ‘en fonction d’une valeur de chaîne?

Je voudrais accéder à un membre dans une structure en utilisant la valeur d’une chaîne:

struct hello_world { char rate; char ssid; }; 

Il y a une varibale disons

 char *ssortingng="ssid"; 

J’aimerais utiliser la valeur de cette chaîne pour faire référence au membre hello_world structure hello_world . Est-ce possible?

Non, ce n’est pas.

Vous avez besoin d’une (longue) déclaration if-else , qui le fera. Comme:

 struct hello_world hw; char *ssortingng="ssid"; if( 0 == strcmp( "ssid", ssortingng ) ) { // use hw.ssid } else if ... 

Au lieu d’utiliser une chaîne, il vaut mieux utiliser une énumération avec tous les cas possibles.

 typedef enum { FIELD_SSID, FIELD_RATE, } field_t field_t ssortingng; 

puis utilisez un interrupteur

 switch (ssortingng) { case FIELD_SSID: //use ssid break; case FIELD_RATE: //use rate break; } 

Cette méthode est beaucoup plus rapide que la comparaison de chaînes.

Si vous utilisez uniquement un champ OU l’autre, vous pouvez utiliser une union au lieu d’une structure.

Définissez une fonction, comme un wrapper, pour renvoyer le membre souhaité.

 char GiveMember(struct hello_world, char* member){ } 

Mais la langue elle-même ne vous fournit rien de tel.