我在嵌入式C寫(在Kiel4)代碼與C003緩衝ATRES比較字符串,它會分配到UC EVENTbuf像在收到警告
else if(ucEVENTBuf=tmMisc_strnstr((INT8C *)AtRes,"C003,",4))
現在我得到警告
assignment in condition
如何克服這個警告。 謝謝
我在嵌入式C寫(在Kiel4)代碼與C003緩衝ATRES比較字符串,它會分配到UC EVENTbuf像在收到警告
else if(ucEVENTBuf=tmMisc_strnstr((INT8C *)AtRes,"C003,",4))
現在我得到警告
assignment in condition
如何克服這個警告。 謝謝
嘗試更換
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) {
}
}
您可能需要對您的代碼的結構做其他更改。
一個常見的錯誤時,在舊天編程C本是偶然使用分配,而不是比較:
if (x = 3)
所以編譯器警告開始這個。但是,如果你真的想要將結果賦值爲布爾表達式,那麼可以。如果你加括號一些編譯器不會發出警告:
if ((x = 3))
如果這還不夠你的系統,你可以嘗試,使之更加明確:
if (!!(x = 3))
感謝您的重播,但我嘗試了兩種方式給出相同的警告 –
在這種情況下,請嘗試以完全獨立的語句進行分配:'ucEVENTBuf = tmMisc_strnstr(...);如果(ucEVENTBuf)...'。 –
你的編譯器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 */
最後的建議在任何情況下都是可取的,因爲它是一個布爾表達式,而'tmMisc_strnstr()'的結果不是。 – Clifford
感謝您的重播,但我有嘗試了兩種方法,它給出了相同的警告 –
@KJAGAn你已經試圖把這個任務放在'if'語句之前? –
@Clifford我不明白你的第一個陳述。無論如何,你的建議是正確的,使用明確的布爾表達式,因爲條件更好。 –