嵌入式开发中利用strstr()对部分模块回传数据进行解析的问题(坑)

受到以下博文的启发:
https://www.cnblogs.com/yup1983/p/11337837.html

验证:
最近通过ESP8266远程控制小车,在wifi回传的数据解析过程中遇到标题所述的烦恼
在这里插入图片描述
如上截图所示,数据回传过程中会接受到‘\0’字节对应的ASCII码为0x00,这就是问题的关键因素。

再看一下strstr()函数的源码:

char* My_strstr(const char* str1, const char* str2)
{
   
    assert(str1 && str2);
    const char* s1 = str1;
    const char* s2 = str2;
    const char* p = str1;
    while (*p!='\0')
    {
   
        s1 =p ;
        s2 = str2;
        while (*s1 != '\0' && *s2 != '\0' && *s1 == *s2)
        {
   
            s1++;
            s2++;
        }
        if (s2 == '\0')
        {
   
            return (char*)p;
        }
        p++;
    }
    return NULL;
}

在源码中可以看到,strstr()函数在轮询判断的时候,首先会判断while (*s1 != ‘\0’ && *s2 != ‘\0’ && *s1 == *s2),即在函数未返回之前,str1和str2中只要出现‘0x00’也就是‘\0’就会终止判断,从而退出,导致意想不到的效果。

对比上面一张截图即可发现答案
在这里插入图片描述
判断代码如下:

void WIFI_Conformation(char* str,Dir* dir)
{
   
	printf("-----WIFI数据解析------\r\n");
		if(strstr("readString: {\"button_up\":\"tap\"}","button"))
		{
   
			printf("strstr 能用\r\n");
		}
	
	if(strstr(str,"up"))
	{
   
		dir->up=1;
		printf("\r\n----up----\r\n");
	}
	
	 else if(strstr(str,"down"))
	{
   
		dir->down=1;
		printf("\r\n----down----\r\n");
	}
	
		else if(strstr(str,"left"))
	{
   
		dir->left=1;
		printf("\r\n----left----\r\n");
	}
	
	 else if(strstr(str,"right"))
	{
   
		dir->right=1;
		printf("\r\n----right----\r\n");
	}
	else;
	
	
}

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-24 06:50:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-24 06:50:02       100 阅读
  3. 在Django里面运行非项目文件

    2023-12-24 06:50:02       82 阅读
  4. Python语言-面向对象

    2023-12-24 06:50:02       91 阅读

热门阅读

  1. obs video-scaler-ffmpeg.c 源码讲解

    2023-12-24 06:50:02       46 阅读
  2. 微信小程序生成一个天气查询的小程序

    2023-12-24 06:50:02       65 阅读
  3. C语言实现对数组去重算法详解

    2023-12-24 06:50:02       66 阅读
  4. HarmonyOS和OpenHarmony的区别

    2023-12-24 06:50:02       64 阅读
  5. OpenCV技巧: 图像孔洞填充的方法与实现

    2023-12-24 06:50:02       56 阅读
  6. 云卷云舒:云原生业务应用成熟度模型

    2023-12-24 06:50:02       72 阅读
  7. facebook广告投放对落地页的要求

    2023-12-24 06:50:02       66 阅读
  8. POP3协议详解

    2023-12-24 06:50:02       53 阅读
  9. 说说对React refs 的理解?应用场景?

    2023-12-24 06:50:02       72 阅读
  10. 【Unity 摄像机组件】Camera场景摄像机的认识

    2023-12-24 06:50:02       55 阅读