2014-03-01 131 views
1

我在嵌入式C寫(在Kiel4)代碼與C003緩衝ATRES比較字符串,它會分配到UC EVENTbuf像在收到警告

else if(ucEVENTBuf=tmMisc_strnstr((INT8C *)AtRes,"C003,",4)) 

現在我得到警告

assignment in condition 

如何克服這個警告。 謝謝

回答

2

嘗試更換

else if(ucEVENTBuf=tmMisc_strnstr((INT8C *)AtRes,"C003,",4)) 

else if((ucEVENTBuf=tmMisc_strnstr((INT8C *)AtRes,"C003,",4))) 

或用

else if((ucEVENTBuf=tmMisc_strnstr((INT8C *)AtRes,"C003,",4)) != NULL) 

如果你的編譯仍然給你同樣的警告(它不應該),然後試試這個

else { 
    ucEVENTBuf=tmMisc_strnstr((INT8C *)AtRes,"C003,",4); 
    if (ucEVENTBuf != NULL) { 
    } 
} 

可能需要對您的代碼的結構做其他更改。

+0

感謝您的重播,但我有嘗試了兩種方法,它給出了相同的警告 –

+2

@KJAGAn你已經試圖把這個任務放在'if'語句之前? –

+0

@Clifford我不明白你的第一個陳述。無論如何,你的建議是正確的,使用明確的布爾表達式,因爲條件更好。 –

2

一個常見的錯誤時,在舊天編程C本是偶然使用分配,而不是比較:

if (x = 3) 

所以編譯器警告開始這個。但是,如果你真的想要將結果賦值爲布爾表達式,那麼可以。如果你加括號一些編譯器不會發出警告:

if ((x = 3)) 

如果這還不夠你的系統,你可以嘗試,使之更加明確:

if (!!(x = 3)) 
+0

感謝您的重播,但我嘗試了兩種方式給出相同的警告 –

+1

在這種情況下,請嘗試以完全獨立的語句進行分配:'ucEVENTBuf = tmMisc_strnstr(...);如果(ucEVENTBuf)...'。 –

4

你的編譯器interprething的,如果statemente如下:

if(ucEVENTBuf=1) // or whatever 

這是一個assignement。正如其他人說,這是通常足以把周圍的其他parentesis:

if((ucEVENTBuf=1)) // or whatever 

,但如果也並不爲你工作,你可以試試這個:

else if((ucEVENTBuf=tmMisc_strnstr((INT8C *)AtRes,"C003,",4))!=0) /* <<<<< ask explicitely to compare against 0 */ 
+1

最後的建議在任何情況下都是可取的,因爲它是一個布爾表達式,而'tmMisc_strnstr()'的結果不是。 – Clifford