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