2012-06-19 50 views
1

我想比較兩個字符串:C18 Microchip的編譯器和STRCMP功能

char _newState[] = "AVAILABLE"; 

當我想用一個常量字符串來比較,我放線:

第一個字符串上面我主要的聲明:

if(strcmppgm2ram((const char *) "AVAILABLE", _newState) == 0){ 
    code: 
} 

函數永遠不會返回零,什麼是解決方案和正確的類型轉換? strcmp是同樣的問題!

回答

2

嘗試:

const far rom char _newState[] = "AVAILABLE"; 

以供將來參考這是一個好主意,不要忽視編譯器的警告 - 他們是來幫助你。

5

它看起來像你有錯誤的順序你的參數。按照C18庫手冊strcmppgm2ram簽名

signed char strcmppgm2ram(const char * str1, const rom char * str2); 

所以你strng不變應該是第二串和你的字符數組應該是第一個參數。

你不應該使用強制轉換,因爲他們所做的只是隱藏像這樣的問題。如果您的類型不匹配,那麼您應該使用該信息來確定正確的類型應該是什麼以及您是否犯了錯誤。使用轉換就像告訴編譯器忽略你所做的一樣,即使編譯器認爲它應該是一個警告/錯誤。

+0

感謝您的回覆!問題解決了! – user1466676

+0

@ user1466676:不客氣。如果答案滿足,請記住接受答案。 – tinman