背景:
单片机通过串口和上位机PC通讯,通过串口助手发送命令(字符形式)控制单片机执行相应的动作。单片机中利用一个 unsigned char str[] 数组接收字符。比较方式:1,使接收数组一位一位和字符比较(例如:if(str[0]=='o') &&str[1]=='f'&&str[2]=='f'){ })程序结果正常
2,为了后续比较方便,将程序简单修改。首先定义好unsigned char arry[]="off"; 然后直接重写strcmp函数
unsigned char Str_Cmp(const unsigned char* str1, const unsigned char* str2)
{
while(*str1 == *str2)
{
if(*str1 == ' ')
return 0;
str1++;
str2++;
}
return (*str1-*str2);
}
最后进行判断比较
if(!Str_Cmp(str, arry))
{
printf("
数组相同
");
}
else
{
printf("
数组不同
");
}
结果:输入off,打印结果是“数组不同”。后续将接收的str和arry都打印出来,都显示的是“off”,这我就不太明白了,所以想请教一下老师们这是什么原因!
朋友,我试了一下,好像不是这个问题。
我将程序修改了一下:将串口重定向至printf()和scanf(),接收数组定义为char s[]类型,通过strcmp(s,"cmd")函数判断比较结果,现象是正确的。
最后,又利用串口接收终端函数接收字符串,发现接收字符数组末位没有出现' ';然后我又遍历该数组,还是没有' '这一位。上网查资料,好像许多人都发现串口助手发送字符串是不带' '。
问题又来了:没有' '的还是字符串吗?
一周热门 更多>