2013-03-22 43 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

相關問題