如何根据字符串的值访问`struct'的成员?
我想用一个字符串值的结构内访问的成员:如何根据字符串的值访问`struct'的成员?
struct hello_world
{
char rate;
char ssid;
};
有一种varibale假设
char *string="ssid";
我想用这个字符串的值参考hello_world
结构中的ssid
成员。这可能吗?
不,不是。
您需要一个(长)if-else
声明,这将做到这一点。像:
struct hello_world hw;
char *string="ssid";
if(0 == strcmp("ssid", string))
{
// use hw.ssid
}
else if ...
定义一个函数,就像一个包装器来传递成员想要的。
char GiveMember(struct hello_world, char* member){ }
但语言本身并没有为您提供任何类似的东西。
如果成员是不同类型的呢? – 2013-03-22 10:02:45
传递'void *',除此之外,这不是问题的一部分......返回void *后 – 2013-03-22 10:04:13
,调用者需要再次知道该类型(将其重新转换为正确的类型)。听起来像一份工作,做了两次。不要误解我的意思 - 我喜欢这个主意,但它不会总是有效的:) – 2013-03-22 10:05:54
而不是使用字符串,你最好使用一个枚举与所有可能的情况。
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无论如何:) – 2013-03-22 10:08:44
以及你需要一个散列函数的字符串,然后做散列结果的开关,但你需要硬编码这些结果或使用我想的宏。 – LtWorf 2013-03-22 10:11:50
此功能称为反射,C没有。 – tjameson 2013-03-22 10:03:33
@tjameson - 是。好的音符。 – 2013-03-22 10:06:19
顺便说一下,在这种特殊情况下,您不需要进行常量优先比较安全检查,因为strcmp(“ssid”,string)= 0(意外使用赋值而不是比较)将无法编译。 – paxdiablo 2013-04-11 06:22:07