使用sprintf需要注意的地方

sprintf 是个变参函数,使用时经常出问题,而且只要出问题通常就是能导致程序崩溃的内存访问错误,但好在由sprintf 误用导致的问题虽然严重,却很容易找出,无非就是那么几种情况,通常用眼睛再把出错的代码多看几眼就看出来了。

sprintf_s()sprintf()的安全版本,通过指定缓冲区长度来避免sprintf()存在的溢出风险 。这个安全版本的原型是:

int sprintf_s(char *buffer,size_t sizeOfBuffer,const char *format [,argument] ... );

缓冲区溢出

第一个参数的长度太短了,建议变参对应一定要细心,而打印字符串时,尽量使用%.ns”的形式指定最大字符数。

strftime

sprnitf 还有个不错的表妹:strftime,专门用于格式化时间字符串的,用法跟她表哥很像,也是一大堆格式控制符,只是毕竟小姑娘家心细,她还要调用者指定缓冲区的最大长度,可能是为了在出现问题时可以推卸责任吧。这里举个例子:

time_t t = time(0);

//产生"YYYY-MM-DD hh:mm:ss"格式的字符串。

char s[32];

strftime(s, sizeof(s), "%Y-%m-%d %H:%M:%S", localtime(&t));

原文:

http://baike.baidu.com/view/1295144.htm

上一篇:一口一口吃掉Hibernate(一)——使用SchemaExport生成数据表


下一篇:云原生DevOps解决方案重磅发布