社区
C++ 语言
帖子详情
std::string为何没有format函数呢?
clever101
博客专家认证
2008-07-05 05:50:44
感觉std::string没有format函数,用起来没有MFC的CString方便。我搞不清为何std::string为何没有format函数(就是格式化字符串函数)呢?
...全文
1820
17
打赏
收藏
std::string为何没有format函数呢?
感觉std::string没有format函数,用起来没有MFC的CString方便。我搞不清为何std::string为何没有format函数(就是格式化字符串函数)呢?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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
格式化
函数
源代码及两种格式化方法
本程序提供了
std
::
string
类型的
Format
格式化
函数
,以及两种格式化
string
字符串的方法,主方法在str.hpp文件中,测试文件在
string
_
format
.cpp中,已测试可用
format
:一个简单的头文件 C++11
std
格式 一个简单的头文件 C++11
std
::
string
格式化程序 用法:
std
::
string
test = util::
Format
( " This is a nice
string
with numbers {0} and
string
s {1} nicely
format
ted " , 123 , " hello " );
std
::
string
test = util::
Format
( " {0, 20} " , "
Format
ting is nice! " );
字符串处理
函数
集 |推荐代码
字符串处理
函数
集 本人精心收集的VB源码,绝对实用,有问题联系QQ:353502250
C
String
,int,
string
,char之间的转换
C
String
,int,
string
,char之间的转换
GetLastError作为
std
::
string
获取与系统错误相对应的文本消息的简单功能。
C++ 语言
65,198
社区成员
250,522
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章