2013-03-22 45 views

回答

5

不,不是。

您需要一个(长)if-else声明,这将做到这一点。像:

struct hello_world hw; 
char *string="ssid"; 

if(0 == strcmp("ssid", string)) 
{ 
    // use hw.ssid 
} 
else if ... 
+4

此功能称为反射,C没有。 – tjameson 2013-03-22 10:03:33

+0

@tjameson - 是。好的音符。 – 2013-03-22 10:06:19

+0

顺便说一下,在这种特殊情况下,您不需要进行常量优先比较安全检查,因为strcmp(“ssid”,string)= 0(意外使用赋值而不是比较)将无法编译。 – paxdiablo 2013-04-11 06:22:07

0

定义一个函数,就像一个包装器来传递成员想要的。

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

但语言本身并没有为您提供任何类似的东西。

+1

如果成员是不同类型的呢? – 2013-03-22 10:02:45

+0

传递'void *',除此之外,这不是问题的一部分......返回void *后 – 2013-03-22 10:04:13

+0

,调用者需要再次知道该类型(将其重新转换为正确的类型)。听起来像一份工作,做了两次。不要误解我的意思 - 我喜欢这个主意,但它不会总是有效的:) – 2013-03-22 10:05:54

2

而不是使用字符串,你最好使用一个枚举与所有可能的情况。

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; 
} 

这种方法比比较字符串方式更快。

如果您只使用一个字段另一个,您可以使用联合而不是结构。

+0

是的,我想过这一个,但放弃建议,因为标题问是否可能,使用字符串。 +1无论如何:) – 2013-03-22 10:08:44

+0

以及你需要一个散列函数的字符串,然后做散列结果的开关,但你需要硬编码这些结果或使用我想的宏。 – LtWorf 2013-03-22 10:11:50