OpenEdv-开源电子网

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

求助sprintf函数的打印问题

[复制链接]

8

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
97
金钱
97
注册时间
2013-2-27
在线时间
2 小时
发表于 2013-7-8 13:43:31 | 显示全部楼层 |阅读模式
做gprs测试,一个串口数据接收函数里,我用了一个sprintf函数,语句如下:
u8 *p,*p1,*p2,*p3;
p=mymalloc(SRAMIN,100); //申请100字节内存
p1=mymalloc(SRAMIN,100); //申请100字节内存
......
p3=(u8*)strstr((const char*)USART2_RX_BUF,"^^^ccc");    //检验串口2是否收到发送的数据“^^^abc”
p3[6]=0;//加入结束符
printf("p3:%s\r\n",p3);                             //接收到的数据用串口1打印出来
sprintf((char*)p1,"Receive Date:%s",p3);    
for(i=1;i<=6;i++)                                 //接收到的数据用串口1逐个打印
{
printf("%c\r\n",*(p3+i-1));
}
printf("p1:%s\r\n",p1);                  //接收到的数据用串口1打印出来
......
myfree(SRAMIN,p);
        myfree(SRAMIN,p1);
我在服务器端发送字符“^^^abc”,串口1打印情况如下:


没有用sprintf合并之前,通过p3输出这个字符串是正常的,合并之后在打印就变成了::::::,这是什么情况,哪位大侠帮我分析下,谢谢啦!



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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-7-8 15:51:57 | 显示全部楼层
你确定p,p1申请内存成功了么?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

8

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
97
金钱
97
注册时间
2013-2-27
在线时间
2 小时
 楼主| 发表于 2013-7-8 15:56:43 | 显示全部楼层
回复【2楼】正点原子:

你确定p,p1申请内存成功了么?

---------------------------------
这个如何验证,麻烦原子哥说下。申请之后,我在这段程序前还用了下(查寻gprs连接状态,根据你的改编的):
                if(connectsta==0&&(timex%200)==0)    //连接还没建立的时候,每2秒查询一次状态
{ USART2_RX_STA=0;
mg323_send_cmd("AT^SISI?","^SISI",300); //查询连接状态
p1=(u8*)strstr((const char*)USART2_RX_BUF,"^SISI");
p2=(u8*)strstr((const char*)p1,",");
if(*(p2+1)=='4')connectsta=1;
else connectsta=2; 
// printf("connectsta:%s\r\n",p2);
printf("connectsta:%d\r\n",connectsta);
}
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-7-8 16:08:07 | 显示全部楼层
判断p1,p是否为NULL,如果成功,就不是NULL,如果不成功,就是NULL.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

8

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
97
金钱
97
注册时间
2013-2-27
在线时间
2 小时
 楼主| 发表于 2013-7-8 16:21:46 | 显示全部楼层
回复【4楼】正点原子:

判断p1,p是否为NULL,如果成功,就不是NULL,如果不成功,就是NULL.

---------------------------------
判断了p1应该是没问题的:
p3=(u8*)strstr((const char*)USART2_RX_BUF,"^^^");
p3[6]=0;//加入结束符
printf("p3:%s\r\n",p3);
memset(p1,0,100);
if(p1==NULL)
{
printf("p1 failed!");
}
strcat((char*)p1,"Receive Date:");
strcat((char*)p1,(char*)p3);
LCD_ShowString(20,110+160,200,16,16,p1);
printf("p1:%s\r\n",p1);
我换了个函数strcat,但是一进去就死了,运行不下去了,这个函数我在这之前写了个测试的函数段也是好的:
//   while(1)
// {
// p3="^^^abc";
// printf("p3:%s\r\n",p3);
// memset(p1,0,100);
// strcat((char*)p1,"Receive Date");
// strcat((char*)p1,(char*)p3);
// printf("p1:%s\r\n",p1);
//    }
这是为什么啊,原子哥?
回复 支持 反对

使用道具 举报

8

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
97
金钱
97
注册时间
2013-2-27
在线时间
2 小时
 楼主| 发表于 2013-7-8 16:37:54 | 显示全部楼层
改成这样:
p3=(u8*)strstr((const char*)USART2_RX_BUF,"^^^ccc");
p3[6]=0;//加入结束符
printf("p3:%s\r\n",p3);
memset(p1,0,100);
if((p1==NULL)||(p3==NULL))
{
printf("p1 or p3 failed!");
}
    sprintf((char*)p1,"Receive Date:%s",p3);//接收到的
printf("p1:%s\r\n",p1);
结果:
        


只显示了一个冒号


回复 支持 反对

使用道具 举报

8

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
97
金钱
97
注册时间
2013-2-27
在线时间
2 小时
 楼主| 发表于 2013-7-8 22:17:19 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
原子大哥,求解释啊~~~~~~
回复 支持 反对

使用道具 举报

48

主题

143

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
355
金钱
355
注册时间
2013-6-26
在线时间
0 小时
发表于 2013-7-8 22:53:04 | 显示全部楼层
p3=(u8*)strstr((const char*)USART2_RX_BUF,"^^^ccc");
p3[6]=0;//加入结束符
printf("p3:%s\r\n",p3);
memset(p1,0,100);
if((p1==NULL)||(p3==NULL))
{
printf("p1 or p3 failed!");
}
     sprintf((char*)p1,"Receive Date:");
printf("p1:%s",p1);
printf("%s\r\n",p3);
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-18 02:31

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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