美文网首页程序员
用snprintf代替sprintf吧

用snprintf代替sprintf吧

作者: v一只熊v | 来源:发表于2018-04-10 10:31 被阅读0次

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;

相关文章

网友评论

    本文标题:用snprintf代替sprintf吧

    本文链接:https://www.haomeiwen.com/subject/hosghftx.html