我的sprintf()函数用的对吗?
我的sprintf()函数用的对吗?有没有可能越界,造成内存操作错误?
我遇到了一个问题:http://topic.csdn.net/u/20120505/20/431fab75-9cb3-42d8-aa92-0ef919030c51.html,删除掉sprintf()函数后症状消失,所以我怀疑我的sprintf函数用的正确。
我sprintf()函数的用法是:
第一处:
void gprs_send_data_buf(char *data,unsigned int data_len)
{
……
char len_str[6]={0};
sprintf(len_str,"%d",data_len); //数值转换成字符放入len_str
……
}
unsigned int 最多是65535 5个字节+一个结束符\0 也就是6个字节 所以len_str[6]={0};长度是够的不会出现缓存溢出吧?
第二处(第一处保留的情况下,这一处注释掉之后,依然出现下载后溢出警告):
mode 处放入的参数数组是:char mode_str[4]={0};
ip char ip_str[16]={0};
port char port_str[5]={0};
void gprs_establish_connection(char* mode, char* ip, char* port)
{
char link[100]={0};
sprintf(link,"AT+CIPSTART=\"%.*s\",\"%.*s\",\"%.*s\"\r\n",3,mode,15,ip,4,port);
UART0_Send_Str(link);
}
第三处:(第一处保留的情况下,这一处注释掉之后,依然出现下载后溢出警告):
int draw_value(int x,uint16 y,float value,char *format,char color,char* last_str,int last_str_len)
{
……
char str[17];
new_str_len=sprintf(str,format, value);
……
}