解決warning: #181-D: argument is incompatible with corresponding format string conversion警告


uint8_t NetRSSI=0;
uint8_t NetBer=0;
uint8_t failtime=0; 

 

 sscanf(&USART_RX_BUF[0],"%*s%u,%u",&NetRSSI,&NetBer);//此句警告 warning:  #181-D: argument is incompatible with corresponding format string conversion。意思是NetRSSI,NetBer這兩個變量的類型與sscanf中的類型不符。

當然可以忽略,因為如果USART_RX_BUF中的字符確實在0-255以內可以得到正確的結果,但是。。。。此處不能忽略。

因為有

uint8_t failtime=0; 

 這個變量類型定義。

我之前忽略后,發現scanf賦值給上述變量的值並沒有轉換成unsigned char,而是將int后面的3個字節覆蓋掉了failtime的內存位置,導致只要一執行上述的ssanf語句后failtime立即被清零。

修改后的為

uint32_t NetRSSI=0;
uint32_t NetBer=0;
uint8_t failtime=0; 

編譯后既不警告,運行時也不會出錯了。

在此提醒,不可輕易忽略警告,特別是涉及到不同長度的變量轉換時。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM