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;
网友评论