OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6766|回复: 5

新手求助memcmp函数

[复制链接]

2

主题

7

帖子

0

精华

新手上路

积分
35
金钱
35
注册时间
2014-8-28
在线时间
0 小时
发表于 2014-8-28 15:50:49 | 显示全部楼层 |阅读模式
5金钱
我从网上找到的代码  用memcmp函数比较两个字符串  用到我从电脑发字符串到战舰开发板  模板是原子大哥的无线通信实验库函数版本  直接添加代码不行   还需要头文件#include "string.h"   然后我写程序  发现我发出的字符串不能和规定的字符串比较  困扰两天  


如果我在前面定义 u8 rx_data[32]="abcdefabcdefgkijklmnopqrstuvwxy";   则开发版屏幕上会出现''OK'' 这说明这个函数可以进行  为什么就不可以和我发送的字符串比较呢   而LCD_ShowString(0,270,239,32,16,rx_data);这一步也可以执行  很不懂啊   请各位指教啊

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

28

主题

1489

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1656
金钱
1656
注册时间
2013-7-24
在线时间
1 小时
发表于 2014-8-28 16:37:42 | 显示全部楼层
楼主,没看明白,你的疑问是什么?
于20150522停用该账号:http://www.microstar.club
回复

使用道具 举报

2

主题

7

帖子

0

精华

新手上路

积分
35
金钱
35
注册时间
2014-8-28
在线时间
0 小时
 楼主| 发表于 2014-8-28 17:04:12 | 显示全部楼层
回复【2楼】styleno1:
---------------------------------
 那个memcmp函数是比较字符串rx_data和"abcdefabcdefgkijklmnopqrstuvwxy"的前4为是否一样  如果一样则显示“OK"(抱歉下面那个20应该是4  )  我是让它比较我通过无线发给开发版的指令是不是前4位”abcd" 如果是则显示OK    如果是“dfgh" 也是显示OK 这只是为了测验这个函数能不能运行
u8 rx_data[32];
rx_data[0]=32; 
  if(NRF24L01_RxPacket(rx_data))            //if 数据读取成功
            {
               LCD_ShowString(0,190,239,32,16,rx_data);//这一步可以执行 
                    if(memcmp(rx_data,"abcdefabcdefgkijklmnopqrstuvwxy",4)==0 )
{
 LCD_ShowString(0,250,200,16,16,"OK");
}
  else if(memcmp(rx_data, "dfghefghij1234567890", 20)==0 )
  {
  LCD_ShowString(0,250,200,16,16,"OK");
  }  
                      LCD_ShowString(0,270,239,32,16,rx_data);//这一步可以执行
                    }
这就是比较函数  但是开发版显示屏并没有显示OK; 我开始认为可以函数没有工作或者错误  于是我在前面定义
u8 ss="abcdefabcdefgkijklmnopqrstuvwxy"  
程序改为这样:
if(memcmp(ss,"abcdefabcdefgkijklmnopqrstuvwxy",4)==0 )
{
 LCD_ShowString(0,250,200,16,16,"OK");
}
那么显示屏上可以显示OK  但是它就是 不能和开发板接收的字符串比较  困扰我两天了  很费解啊
回复

使用道具 举报

28

主题

1489

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1656
金钱
1656
注册时间
2013-7-24
在线时间
1 小时
发表于 2014-8-28 17:10:10 | 显示全部楼层
你得查看一下收到的数据,才可以判断是哪儿的问题
于20150522停用该账号:http://www.microstar.club
回复

使用道具 举报

2

主题

7

帖子

0

精华

新手上路

积分
35
金钱
35
注册时间
2014-8-28
在线时间
0 小时
 楼主| 发表于 2014-8-28 17:22:26 | 显示全部楼层
回复【4楼】styleno1:
---------------------------------
您好   我把单片机收到的数据在显示屏上显示了   这是代码:LCD_ShowString(0,190,239,32,16,rx_data);//这一步可以执行
你看在memcmp函数之前之后共显示两次  我都让rx_data显示出来  的确和我发送的字符串是一样的  显示屏上显示abcdefabcdefgkijklmnopqrstuvwxy上下两行   两行中间应该是字符串比较之后显示OK  并没有显示  我单独定义一个相同的字符串换掉rx_data比较这样显示屏上就可以显示”OK“  而且都是用u8定义 类型和rx_data一样  请指导
回复

使用道具 举报

0

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
66
金钱
66
注册时间
2014-8-23
在线时间
10 小时
发表于 2014-9-9 13:04:16 | 显示全部楼层
你收到的数据怕不是字符串吧?字符串中 '\0'字符的位置结束的。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-2 01:17

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表