用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;

你可能感兴趣的:(用snprintf代替sprintf吧)