sprintf()函数可能发生的错误

时间:2023-03-09 16:38:02
sprintf()函数可能发生的错误

接收到如下数据:

GET http://app.tdvpn.com/heartbeat?mac=898607B81017AT+CIPSTATUS?
&status=/ HTTP/1.1
Host:localhost

按理:AT+CIPSTATUS?不应该出现在上述字符串中,字符串产生语句:

    sprintf(jsonbuf,"%s/heartbeat?mac=%s&status=%02d",urlHead,MACADDR,status);
sprintf(httppost,"GET %s/ HTTP/1.1\r\nHost:localhost\r\n\r\n",jsonbuf);

上述错误产生的原因:MACADDR对应的内存地址为0x2000007C,“AT+CIPSTATUS? ”来自USART2_TX_BUF[] 数组,数组对应的内存地址为:0x20000088,与MACADDR的地址时连续的,这就导致sprintf()函数在读取MACADDR的值时把USART2_TX_BUF的值也读了;

解决办法:MACADDR数组末尾填0 或者\r\n  这样 sprintf()读到0时则停止读取(%s的时候)