用snprintf代替sprintf吧

sprintf最常用的功能莫过于将int,float等类型数据打印到char数组中去。但是使用sprintf常常会由于疏忽产生缓冲区溢出的问题,导致不可知的错误。
snprintf是sprintf的安全版本,其函数原型为

int _snprintf(char *buffer, size_t count, const char *format [,argument] ... );

其第二个参数可以指定转换后字符串在缓冲区中的长度,确保不发生溢出。

当然,有一个问题需要注意,指定的转换长度是包含结束符"\0"的字节数,例如,

float a = 1.23;
char buf[10];
snprintf(buf,4,"%f",a);
cout << buf;

得到1.2,而要完整的转换a,则需要指定转换长度为5,

float a = 1.23;
char buf[10];
snprintf(buf,5,"%f",a);
cout << buf;
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、基础知识:1、JVM、JRE和JDK的区别:JVM(Java Virtual Machine):java虚拟机...
    杀小贼阅读 2,434评论 0 4
  • 看到低矮地房子会想到你 看到黑黢黢的栅栏会想到你 看到那大片的树林和翠绿的叶子会想到你 看到那长有宽大叶子的生长期...
    疤_阅读 329评论 0 0
  • 清早 我光着脚丫 走在这片油菜花地里 前方的路仿佛没有尽头 小小的我淹没在这片油菜地里 那时的日子好像那么长 我们...
    雪鲸呀阅读 1,330评论 1 4
  • 小生 第一天跟小生同桌,没有好意思打招呼。因为我在小生的向组织揩油的小组群里几乎没有发言。感觉有点对不住小生。主动...
    加一的修炼场阅读 861评论 2 2