文字列の値を使用して、構造体内のメンバーにアクセスしたいと思います。
struct hello_world
{
char rate;
char ssid;
};
言いましょう変数があります
char *string="ssid";
この文字列の値を使用して、構造ssid
体内のメンバーを参照したいと考えています。hello_world
これは可能ですか?
いいえ、そうではありません。
これを行うには、(長い)if-else
ステートメントが必要です。お気に入り:
struct hello_world hw;
char *string="ssid";
if( 0 == strcmp( "ssid", string ) )
{
// use hw.ssid
}
else if ...
文字列を使用する代わりに、可能なすべてのケースで列挙型を使用することをお勧めします。
typedef enum {
FIELD_SSID,
FIELD_RATE,
} field_t
field_t string;
その後、スイッチを使用します
switch (string) {
case FIELD_SSID:
//use ssid
break;
case FIELD_RATE:
//use rate
break;
}
この方法は、文字列を比較するよりもはるかに高速です。
1 つのフィールドのみを使用する場合、または他のフィールドを使用する場合は、構造体の代わりにユニオンを使用できます。
必要なメンバーを返すラッパーのような関数を定義します。
char GiveMember(struct hello_world, char* member){ }
しかし、言語自体はこのようなものを提供しません。