簡體   English   中英

如何將char數組與字符串進行比較

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM