2015-06-19 20 views
3

我有一個包含一個字符串(字符指針)的結構。只使用「虛擬」指針進行比較

此字符串/數組應在下列之一的形式:

  1. 包含實際字符串數據
  2. 沒有實際的數據,只是應該能夠證明它是一種叫做STATE_1
  3. 與上面相同,但STATE_2

我希望能夠檢查一個「串」是STATE_1STATE_2,並且一切都做得那麼與包含實際數據的情況不同。如果我只有一個狀態,我可以使用空指針。

我嘗試了一些東西,但它導致了未定義的行爲。

char *STATE_1, *STATE_2; 
... 
if(tstruct.string == STATE_1 || tstruct.string == STATE_2){ 
    ... 
} 
+0

它沒有定義,因爲你正在取這些未初始化指針的*值*。 「虛擬指針」必須指向某種東西。 – Kaz

回答

4

保留兩個靜態地址。他們保證是獨一無二的。

static char STATE_1[1]; 
static char STATE_2[1]; 

if (tstruct.string == STATE_1 || tstruct.string == STATE_2) { 
    ... 
} 

這些可能是全局變量,或者他們可能是靜態的本地人,任何一個。

+0

對你能夠理解這個問題很有幫助。如果OP計劃擁有這個結構的許多實例,那麼他或她將不能在不同的實例上以不同的方式更改此字符串的內容。就我而言,我一直無法弄清楚問題在哪裏說沒有這樣的計劃。如果這真的是OP的意圖,那麼我真的不需要甚至在此結構中聲明該字符串以開始。但正如我最初所說 - 如果你已經正確地理解了這個問題,那麼我猜這個解決方案可以解決它。 –

+1

好方法擺脫& - 註釋! – user3125367

2

我不知道,但我想你想是這樣的:

char STATE_1, STATE_2; // dummy 'char's for 2. and 3. 

if (tstruct.string == &STATE_1 || tstruct.string == &STATE_2) { 
    // ... 
} 
0

有多種方式來做到這一點:

1)可以具有在是 類型枚舉stringState的結構的變量而言可以是0,1或2(0表示字符串中有數據,1所表示狀態-1和狀態-2意味着狀態-2)。缺點是每次更改數據時都必須修改stringState,如果您忘記這樣做,會有後果。 2)字符串本身的值可以是「STATE1」或「STATE2」,然後你可以用STATE1或STATE2來執行strcmp,否則它會有實際的數據(STATE0)。