繁体   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