OpenEdv-开源电子网

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

从长字符串中提取字符串,并组合成新的字符串发送出去

[复制链接]

1

主题

1

帖子

0

精华

新手上路

积分
26
金钱
26
注册时间
2019-5-6
在线时间
6 小时
发表于 2021-3-22 10:53:01 | 显示全部楼层 |阅读模式

/*
下面的程序是从usb_Buf_try[100]数组内的长字符串中,提取出+MIPLOBSERVE: 0,后面的观察号“69234”,这个观察号是动态的,提取后的观察号放入objtnum
然后,用sprintf()组合含有观察号的新字符串命令,通过串口Uart1_SendStr()发送给上位机串口调试助手。
问题:串口助手收到的数据显示是:AT+MIPLOBSERVERSP=0,,1      //发现里面没有显示观察号!!!!!
      如果直接加入char objtnum[]="69234";  则显示正确为:AT+MIPLOBSERVERSP=0,69234,1
*/
#include "string.h"
#include "stdio.h"
char *strx;
char atstr[100];   //存发送at指令数组
char objtnum[20];//观察号
    char usb_Buf_try[100]="MIPLEVENT: 0,6 +MIPLOBSERVE: 0,69234,1,3311,0,-1";
    strx=strstr((const char*)usb_Buf_try,(const char*)"+MIPLOBSERVE");  //截取字符串strs=“+MIPLOBSERVE: 0,69234,1,3311,0,-1"
    memset(objtnum,0,sizeof(objtnum));   //清objtnum数组内容
     sscanf(strx, " %*s %*s %s", objtnum);   //将strx的字符串内容格式化输入后,输入到objtnum中
    // char objtnum[]="69234";
    memset(atstr,0,sizeof(atstr));
    sprintf(atstr,"AT+MIPLOBSERVERSP=0,%s,1\r\n",objtnum);  //组合成带<objtnum>观察号的“响应订阅请求”命令
     Uart1_SendStr(atstr);//发送响应订阅请求命令
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

6

主题

34

帖子

0

精华

初级会员

Rank: 2

积分
119
金钱
119
注册时间
2019-2-12
在线时间
28 小时
发表于 2022-4-13 17:54:23 | 显示全部楼层
帖子够久了,看到就回复一下
sscanf用错了
int objnum
sscanf(strx, " %*[^,],%d", objnum);
sprintf(atstr,"AT+MIPLOBSERVERSP=0,%d,1\r\n",objnum);
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-6-9 10:15

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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