strstr函数、strcmp函数

328 阅读1分钟

1、学习strstr函数、strcmp函数

(1)strstr函数:

原型:strstr(const char *haystack, const char *needle):

功能:在字符串中查找第一次出现指定字符c的位置。

返回值:指向第一次出现指定字符的指针,如果未找到则返回NULL。如:strstr(str1,str2)用于判断字符串str2是否是str1的子串。

(2)strcmp函数 原型:strncmp(const char *str1, const char *str2, size_t n)

功能:比较str1,str2前n个字符是否相同;

返回值:整数值,当str1<str2时返回值小于0,当str1==str2时返回值等于0,当str1>str2时大于0。

2、在这里我们使用strstr函数比较电脑发送过去的指令与我们设置的值进行比较,来控制开发板上LED灯的亮与灭。 (1)代码:

int main(void)
{
	//局部变量定义数组不能太大,防止程序卡死
	int cnt=0;
        KEY_Init();
	LED_Init();
	USART1_Init(115200);
	while(1)
	{
		//程序主函数中只能写一个死循环,其他函数采用轮询的方式
		 if(USART1->SR&1<<5)//表示接收到了数据
		 {
	   	buff_rx[cnt]=USART1->DR;//读了寄存器就相当于标志寄存器位已经清零,不需手动清零
			 if(buff_rx[cnt]=='\n')
			 {
			   buff_rx[cnt-1]='\0';//添加结束符
				 cnt=0;//下标归0,方便下次接收
				 //开启LED0
				 if(strstr((const char*)buff_rx,"LED0_ON")!=NULL)
				 {
					 LED0=1;
				 }
				 if(strstr((const char*)buff_rx,"LED0_OFF")!=NULL)
				 {
					 LED0=0;
				 }
				 	//开启LED0
				 if(strstr((const char*)buff_rx,"LED1_ON")!=NULL)
				 {
					 LED1=1;
				 }
				 if(strstr((const char*)buff_rx,"LED1_OFF")!=NULL)
				 {
					 LED1=0;
				 }
			 }
			 else
			 {
			 cnt++;
			 }
		 }
  }	
}

(2)、实验效果 代码执行前:

c4b44e74d6ca3454277e1bedff469ba.jpg 发送指令: image.png 指令接收后:

c88eb3f12450c58063479711886f59a.jpg