博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
sprintf以及字符串格式化
阅读量:6515 次
发布时间:2019-06-24

本文共 1441 字,大约阅读时间需要 4 分钟。

sprintf是传统的c字符串格式化函数.用法:

#include
char buffer[10]; sprintf(buffer,"%d",6666);//将一个整形值转化为c字符串形式

其优点:  1.效率最佳   2. 易用性与清晰性

缺点:     1.长度安全性引起缓冲区溢出,破坏内存  2. 类型安全性问题    3. 不能应用于模板

在windows平台中 winsdk提供了安全字符串系列函数,来取代传统的有缓冲区溢出的字符串函数.实例:

#include
char buffer[30]; StringCchPrintf(buffer, 30, "%d",6666); 

      windows下的c或倾向于c的c++程序应该使用安全字符串函数代替旧的函数.在vc2010环境实测,同时包含stdio.h, Strsafe.h则sprintf(buffer,"%d",6666);编译不能通过:提示让用安全的StringCchPrintf函数代替sprintf.snprintf 和_snprintf也同样该被StringCchPrintf替代. 

下面来看c++的替代方案.

   1.std::stringstream,其优点和缺点正和sprintf相反

#include 
ostringstream temp; temp<<6666; cout<

  

   2.boost::lexical_cast,是stringstream的包装类,它并不是为格式化字符串而生(boost::format),它的作用是数据类型转化.因该和C里面的atoi等转换函数放在一起讨论.其实现代码大致为:

template
Target lexical_cast(Source arg) {
Target result; if(!(interpreter << arg && interpreter >> result)) BOOST_LCAST_THROW_BAD_CAST(Source, Target); return result; } 

    使用方法:

    #include "boost/lexical_cast.hpp"

    string result=lexical_cast<string>(6666); 

 3. boost::format ,请参考boost文档

(boost作为准标准库,值得讨论, MFC中的CString.Format 等不做讨论)

总结:

  1.     如果只是将一个值转化为字符串,尽量使用lexical_cast,如果你正在使用boost库的话,如果是格式化,请使用boost::format
  2.     如果没有安装boost,或者还要进行格式换字符串,尽量使用stringstream
  3.     如果你在windows下工作,并且追求效率,请使用安全字符串函数StringCchPrintf
  4.     再如果的话,你是该考虑_snprintf ,snprintf?
  5.     最后,放弃sprintf吧,永远不要使用它了.   

转载于:https://www.cnblogs.com/LoveLyre/archive/2011/09/13/2175030.html

你可能感兴趣的文章
一张图看懂normal,static,sealed,abstract 的 区别
查看>>
Task的使用
查看>>
grep和正则表达式
查看>>
s:iterator巧妙控制跳出循环
查看>>
移动互联网思维
查看>>
redis-手写redis切片和非切片连接池并注入springboot中
查看>>
Kosaraju算法详解
查看>>
Serv-U 的升级及数据备份和迁移【转】
查看>>
webstorm无法显示左边文件夹目录的解决方法
查看>>
Android数据保存之文件保存
查看>>
数字校园-云资源平台 2014.10.26-人人通共享空间
查看>>
使用IIS承载WCF服务
查看>>
在 CentOS 和 RHEL 上安装 Puppet 服务器和客户端
查看>>
Android性能优化Google课程翻译一:Render----OverDraw实战
查看>>
用Camshift算法对指定目标进行跟踪
查看>>
Tiny4412 开发板 编译环境搭建【转】
查看>>
为你的网站加上SSL,可以使用HTTPS进行访问
查看>>
软件project--谈项目开发
查看>>
Android studio及eclipse中的junit单元測试
查看>>
几个英文网站
查看>>