首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

小弟我的sprintf()函数用的对吗

2012-05-24 
我的sprintf()函数用的对吗?我的sprintf()函数用的对吗?有没有可能越界,造成内存操作错误?我遇到了一个问

我的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);
……
}



[解决办法]
char len_str[100];

int 不只那么大. 数组也没有必要初始化.


[解决办法]
用snprintf,unsigned int指不定多大,最大4294967295是常见的
[解决办法]
那把那个6个字节的改成9个字节试试不就知道了!
[解决办法]
无论如何snprintf还是要用的。
[解决办法]

探讨
unsigned int 最多是65535

[解决办法]
snprintf还是很安全的。

热点排行