社区
C++ 语言
帖子详情
std::string为何没有format函数呢?
clever101
博客专家认证
2008-07-05 05:50:44
感觉std::string没有format函数,用起来没有MFC的CString方便。我搞不清为何std::string为何没有format函数(就是格式化字符串函数)呢?
...全文
1804
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
`
函数
是作者自定义的一个实现,它提供了一种方便的方式来格式化`
std
::
string
`对象,使得代码更清晰易读。源代码主要分布在`str.hpp`和`
string
_
format
.cpp`这两个文件中。 在`str....
format
:一个简单的头文件 C++11
std
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! ...
字符串处理
函数
集 |推荐代码
C++里
没有
直接对应的
函数
,但可以使用`
std
::accumulate`结合`
std
::
string
stream`来实现类似效果。 - `&` 运算符:VB中,用`&`运算符连接两个字符串。C++中,可以使用`+`运算符或者`
std
::
string
::append`。 3. **...
C
String
,int,
string
,char之间的转换
将`C
String
`转换为`
std
::
string
`需要先获取`C
String
`的缓冲区,然后传递给`
std
::
string
`的构造
函数
: ```cpp C
String
cstr("Hello MFC");
std
::
string
str
Std
; str
Std
=
std
::
string
(cstr.GetBuffer()); cstr....
GetLastError作为
std
::
string
以下是一个简单的示例,展示如何将`GetLastError`的错误代码转换为`
std
::
string
`: ```cpp #include #include <
string
>
std
::
string
GetLastErrorAs
String
() { DWORD errorCode = GetLastError(); if (error...
C++ 语言
65,187
社区成员
250,526
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章