[英]How to compare an array of char with a string
我的程序是從Zigbee接收數據並對其進行過濾以獲得我想要的。
unsigned char idata buff[100]; //To read data from rawrxd[] and process data
unsigned char count=0; //To store counter for rawrxd[]
unsigned char buff_count=0; //store counter for buff[], read counter for rawrxd[]
if(buff_count!=count) //checking Is there any unread data?
{
if(buff_count==100) //go back to start position of array
buff_count=0;
buff[buff_count] = rawrxd[buff_count]; //read the data
if(strcmp(buff, "UCAST:000D6F0000A9BBD8,06=!221~@") ==0)
{
ES0=0;
Serial_txString("AT+UCAST:000D6F0000A9BBD8=!222~@");
tx(0x0D);
tx(0x0A);
ES0=1;
}
if(strcmp(buff, "UCAST:000D6F0000A9BBD8,06=!221#@") ==0)
{
ES0=0;
Serial_txString("AT+UCAST:000D6F0000A9BBD8=!222#@");
tx(0x0D);
tx(0x0A);
ES0=1;
}
buff_count++; //increase the read_count
}
這就是緩沖區應該接收UCAST,然后將其與字符串進行比較的方式,如果相同,則返回0。但是,它只比較一次,而在我收到下一個UCAST之后,它根本不比較。
同樣,它第一次比較時必須相同才能正常工作。 如果收到了錯誤的字符,然后又收到了正確的字符,它將不起作用。 由此,是指針問題嗎? 由於我的緩沖區是char數組,因此我嘗試將其與字符串進行比較。
問題是buff[]
在進行字符串比較之前沒有NUL字符。 因此, strcmp()
不會在您認為應該接收的字符串的末尾感知(而是查看之前數組中剩余的內容),因此它永遠不會匹配。
buff [buff_count] = rawrxd[buff_count]; //read the data
buff [++buff_count] = '\000'; /* you need to add this */
如果所有其他條件都很好,那么添加了strcmp()
就有機會工作。
另外,我很確定您可以整理和優化代碼序列
Serial_txString("AT+UCAST:000D6F0000A9BBD8=!222~@");
tx(0x0D);
tx(0x0A);
進入
Serial_txString("AT+UCAST:000D6F0000A9BBD8=!222~@\x0d\x0a");
通過分配方式:
buff[buff_count] = rawrxd[buff_count];
您只是將rawrxd緩沖區的第一個元素分配給buff變量。 它是變量分配,而不是指針分配。
由於兩者都具有相同的緩沖區大小,因此等於兩個基本指針,如下所示:
buff = rawrxd;
然后執行一個strcmp()或更好的方法,因為字節(元素)的數量是固定的,所以請使用strncmp()。
希望能幫助到你。
干杯!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.