【发布时间】:2013-03-12 03:18:46
【问题描述】:
我想通过使用字符串的值来访问结构中的成员:
struct hello_world
{
char rate;
char ssid;
};
假设有一个变量
char *string="ssid";
我想使用这个字符串的值来引用hello_world 结构中的ssid 成员。这可能吗?
【问题讨论】:
我想通过使用字符串的值来访问结构中的成员:
struct hello_world
{
char rate;
char ssid;
};
假设有一个变量
char *string="ssid";
我想使用这个字符串的值来引用hello_world 结构中的ssid 成员。这可能吗?
【问题讨论】:
与其使用字符串,不如使用包含所有可能情况的枚举。
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;
}
这种方法比比较字符串快得多。
如果你只使用一个字段OR另一个,你可以使用联合而不是结构。
【讨论】:
定义一个函数,比如一个包装器来传递你想要的成员。
char GiveMember(struct hello_world, char* member){ }
但是语言本身并没有为你提供这样的东西。
【讨论】:
void* 返回后,调用者需要再次知道类型(将其转换回正确的类型)。对我来说听起来像是一份工作,做了两次。不要误会我的意思——我喜欢这个主意,但它并不总是有效:)
不,不是。
您需要一个(长)if-else 语句,它可以做到这一点。喜欢:
struct hello_world hw;
char *string="ssid";
if( 0 == strcmp( "ssid", string ) )
{
// use hw.ssid
}
else if ...
【讨论】:
strcmp ("ssid", string) = 0(意外使用赋值而不是比较)不会编译。