今天调试单片机的时候,使用sprintf函数来拼接字符串,其中有一个变量是从4G模组获取的modbus 数据,结果打印出来的数据一直不对
sprintf((char *)send_buf2 , "&@#%$%.*s",(send_len),send_buf);
UGPRS_SEND(send_buf2,(send_len+5));
找了半天问题,定位在这个地方,器件我一直怀疑是我的内存炸了,读不到内存,尝试用指针,并且加大内存空间,可是都没什么用,知道后来,发送另外一条指令得到了正确的回复,排除了内存的问题,又在网上查找sprintf函数,发现sprintf函数会把 00 00 当做结束符,最后不得已,更新了思路,使用内存拷贝来处理
memset(send_buf2 , 0 ,strlen((char *)send_buf2));
memcpy(send_buf2, heard , 5);
memcpy(&send_buf2[5], send_buf,send_len);
UGPRS_SEND(send_buf2,send_len+5);
这样子最终输出了正确的指令,大功告成,写个博客记录一下