_snprintf 使用的一点错误记录

来源:互联网 发布:淘宝客返利是什么意思 编辑:程序博客网 时间:2024/05/01 17:29
  •       错误代码:
  • #include "stdafx.h"#include <time.h>struct AAA {time_t nowtime;double   dd;};int main(){char sql_insert[256]={0};AAA  A;A.dd=999.89889;A.nowtime=time(NULL);printf("%d\n",sizeof(AAA));_snprintf(sql_insert,_countof(sql_insert)-1,"%s,%ld,%.2f","HelloWorld",A.nowtime,A.dd);printf("%s\n",sql_insert);return 0;}

  • 自己去试试看到输出有误,后来经过多次尝试才发现,在使用 格式化输出时,格式化语句一定一定不能错误,此处显然time_t  类型实用错误, 导出访问越界,使A.dd  的值获取错误,此处有两种改法:

  • 1. time_t   --->double
  • _snprintf(sql_insert,_countof(sql_insert)-1,"%s,%.0f,%.2f","HelloWorld",A.nowtime,A.dd);
  • 2 time_t   输出格式
  • _snprintf(sql_insert,_countof(sql_insert)-1,"%s,%I64d,%.2f","HelloWorld",A.nowtime,A.dd);

    附录下,看看各个格式的输出:
  • #include "stdafx.h"#include <iostream>#include<assert.h>#include <time.h>using namespace  std;struct AAA {time_t nowtime;/*double nowtime;*/double   dd;};int main(){char sql_insert[256]={0};AAA  A;A.dd=999.89889;A.nowtime=time(NULL);printf("%d\n",sizeof(AAA));_snprintf(sql_insert,_countof(sql_insert)-1,"%s,%d,%.2f","HelloWorld",A.nowtime,A.dd);printf("%s\n",sql_insert);_snprintf(sql_insert,_countof(sql_insert)-1,"%s,%.0f,%.2f","HelloWorld",A.nowtime,A.dd);printf("%s\n",sql_insert);_snprintf(sql_insert,_countof(sql_insert)-1,"%s,%I64d,%.2f","HelloWorld",A.nowtime,A.dd);printf("%s\n",sql_insert);return 0;}

    各位 可以去试试,欢迎留言.................
  •            推荐一篇格式转换写的很好的,可以去瞧瞧.......
  •                                 http://blog.csdn.net/zfzf294990051/article/details/6303552
0 0
原创粉丝点击