社区
C++ 语言
帖子详情
std::string为何没有format函数呢?
clever101
领域专家: C/C++技术领域
2008-07-05 05:50:44
感觉std::string没有format函数,用起来没有MFC的CString方便。我搞不清为何std::string为何没有format函数(就是格式化字符串函数)呢?
...全文
1865
17
打赏
收藏
std::string为何没有format函数呢?
感觉std::string没有format函数,用起来没有MFC的CString方便。我搞不清为何std::string为何没有format函数(就是格式化字符串函数)呢?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
17 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
iambic
2008-07-06
打赏
举报
回复
>不过,像是cstring的format类的函数,有什么不安全的?没碰上过问题呀
CString的Format,类似于sprintf。只是没有缓冲区溢出的问题,但在类型上是不安全的。比如你指定了格式化符号是"%f",但是你并不能保证传入的参数就是浮点数。这和C++的类型系统是冲突的。
可以看看《Exceptional C++ Style》第二条和第三条。
du51
2008-07-06
打赏
举报
回复
对不起..当时可能比较晚了.言语欠斟酌了.
实在不好意思.
我想了下.可能确实是不安全的原因吧.
我当时的意思是C++的IO都是基于流的.无论是IOSTREAM 还是STRINGSTREAM ,STRSTREAM
当然了,<< >>本来就是一种流的运算.
我觉得C++里..一大堆里<< >>里出现一个vsnprintf之类的,不是很协调..
BetterMind
2008-07-06
打赏
举报
回复
学习。。。
two_ears
2008-07-06
打赏
举报
回复
[Quote=引用 13 楼 iambic 的回复:]
>和安全不安全没太大关系..
>MALLOC安全吗...STL一样用.
你这个例子举得比较差。format之类的函数是实现出来给用户用的接口。STL有把malloc或者类似的东西暴露给用户吗?若按你这样推理,世界上就没有任何东西是基于安全性考虑而被废弃的了。
>基于流的和这些东西语意冲突
什么是基于流的?std::string是基于流的?和什么语意冲突?
[/Quote]
我也没看明白什么是基于流的,不过,像是cstring的format类的函数,有什么不安全的?没碰上过问题呀
iambic
2008-07-06
打赏
举报
回复
>和安全不安全没太大关系..
>MALLOC安全吗...STL一样用.
你这个例子举得比较差。format之类的函数是实现出来给用户用的接口。STL有把malloc或者类似的东西暴露给用户吗?若按你这样推理,世界上就没有任何东西是基于安全性考虑而被废弃的了。
>基于流的和这些东西语意冲突
什么是基于流的?std::string是基于流的?和什么语意冲突?
du51
2008-07-06
打赏
举报
回复
和安全不安全没太大关系..
MALLOC安全吗...STL一样用.
基于流的和这些东西语意冲突
iambic
2008-07-06
打赏
举报
回复
>格式化有很多种方法,啊,
>1,sprintf函数可以实现格式化字符串,并保存到一个字符数组
>2,snprintf也能实现但比起sprintf函数稍微要安全一些了啊
>3,ostringstream对象也能实现字符串的格式化,并比sprintf和snprintf函数要好得多,主要是安全得多,但没他们那么效率高
>4,ostrstream也能实现对象的格式化,但一般都没有用,用得最多的是ostringstream的对象
>另外boost里面也有一个更为灵活的lexical_cast函数也可以实现字符串的格式化..
把《Exceptional C++ Style》的东西搬出来,但是不点明参考,不太厚道吧。
王旺旺旺
2008-07-05
打赏
举报
回复
#include <string>
#include <sstream>
using namespace std;
template<typename T>
T GetStrValue(char* str)
{
string strValue = str; //转换为string
istringstream osValue;
osValue.str(strValue); //得到istrstream
T value;
osValue >> value; //得到数值
return value;
}
//=============================
#include "main.h"
#include <iostream>
using namespace std;
int main()
{
char test[15] = "-2001234567";
long res = GetStrValue<long>(test);
cout << "test str: " << test << endl;
cout << "long value: " << res << endl;
}
王旺旺旺
2008-07-05
打赏
举报
回复
format是干么用的?
zhangjundriver
2008-07-05
打赏
举报
回复
格式化有很多种方法,啊,
1,sprintf函数可以实现格式化字符串,并保存到一个字符数组
2,snprintf也能实现但比起sprintf函数稍微要安全一些了啊
3,ostringstream对象也能实现字符串的格式化,并比sprintf和snprintf函数要好得多,主要是安全得多,但没他们那么效率高
4,ostrstream也能实现对象的格式化,但一般都没有用,用得最多的是ostringstream的对象
另外boost里面也有一个更为灵活的lexical_cast函数也可以实现字符串的格式化..
red_berries
2008-07-05
打赏
举报
回复
不知道什么,高手给讲一下
iambic
2008-07-05
打赏
举报
回复
因为不安全。
JeffreyX
2008-07-05
打赏
举报
回复
C++标准库提倡的方式:
#include <sstream>
ostringstream s;
s<<111<<","<<222;
boost库好像有个
boost::format(...)也可以达到你期望的效果
我一般都是用C运行库的_snprintf(...)
K行天下
2008-07-05
打赏
举报
回复
因为你可以使用 sstream 流
K行天下
2008-07-05
打赏
举报
回复
因为你可以使用 sstream 流
bitxinhai
2008-07-05
打赏
举报
回复
std::string没有封装这个方法,
可以自己写一个这样的方法!!!
lyle3
2008-07-05
打赏
举报
回复
自己写个呗~
std
::
string
的
format
一种实现
本文介绍了一种在C++中使用
std
::
string
和
std
::w
string
进行格式化字符串的方法,通过自定义
函数
std
_
string
_
format
和
std
_w
string
_
format
,实现了类似于C
String
的
Format
功能,解决了跨平台和字符类型转换的问题。
【C++ 系列文章 基础 01 --
std
::
string
与 fmt::
format
】
本文详细介绍了C++中的
std
::
string
和fmt::
format
。
std
::
string
是标准库中的字符串类,自动管理内存,操作方便。fmt::
format
是现代化的字符串格式化
函数
,类型安全、语法简洁。通过示例代码展示了二者结合进行字符串格式化的方法,适用于日志记录、文件路径构造等场景。
std
::
string
之
format
本文详细介绍C++中使用
format
函数
进行格式化字符串的方法,以及使用C++标准库中的流对象进行格式化输出的高级技巧,包括数据类型、对齐方式、精度控制等。
C++ -
std
::
string
字符串格式化方法总结
本文总结了多种C++字符串格式化方法,包括C语言风格的sprintf/snprintf、C++的
string
stream、第三方库如
format
和s
format
,以及C++20的新特性
std
::
format
。
string
不是
std
的成员_
std
::
format
for C++20简介
本文介绍了C和C++格式化字符串的解决方案。C语言的printf系列
函数
有性能问题,C++的ostream性能低下,第三方库boost::
format
也有性能问题。fmtlib部分功能被加入C++20成为
std
::
format
,它速度快,还能解决浮点数精度丢失等问题,且支持自定义类型扩展和编译时parse。
C++ 语言
65,210
社区成员
250,514
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章