C++中有没有string buffer类型的?

Tommy 2002-09-05 05:21:54
在调用很多API是时候,需要传进去一个字符串缓冲区作为结果输出用,如wcstombs(),有没有一种像string的类型,可以指定大小,可以直接存取内容的类型?类似下面的用法:

strbuf.set_size(wcstombs(NULL, wcstr, cwch));
wcstombs(strbuf.buffer(), wcstr, cwch);

现在只能new一块内存,接收字符串,再转换成string传给其它函数,用完后再delete,比较麻烦。

有这样的类吗?
...全文
1500 17 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
stidio_zhougang 2002-09-06
  • 打赏
  • 举报
回复
用string或者CString!
vixkywx 2002-09-06
  • 打赏
  • 举报
回复
c++builder有AnsiString类型
Tommy 2002-09-06
  • 打赏
  • 举报
回复
to anrxhzh(百宝箱) :

对不起了,我已经结帖,没法再追加分数了,Sorry!
Tommy 2002-09-06
  • 打赏
  • 举报
回复
to anrxhzh(百宝箱) :

谢了,谢了。这就是我想要的东西。

我就是觉得,这种用法应该是不少的,起码我已经遇到过好几次了,应该会有比较优雅的做法才对。
anrxhzh 2002-09-06
  • 打赏
  • 举报
回复
To Tommy:

C++标准规定:vector容器中的元素必须是连续存放的。
这一规定在1998年并没有被明确,直到2000年才在更新版中被明确。
详细情况见:http://www.gotw.ca/publications/mill14.htm
Containers In Memory: How Big Is Big?
This article appeared in C/C++ Users Journal, 19(1), January 2001.

qfsb_p 2002-09-06
  • 打赏
  • 举报
回复
我觉得你可以用ostringstream来实现该功能,他实际上是个string的流,也就是个buffer。然后还有个方法可以取出所有的string。
如ostringstream buf;
.......
string aa = buf.str();
ggto 2002-09-06
  • 打赏
  • 举报
回复
up
c_antinomy 2002-09-06
  • 打赏
  • 举报
回复
用流库中的strstream,相当于string buffer!
Tommy 2002-09-06
  • 打赏
  • 举报
回复
to yhlubber(lu)
用这样的话,不知道要用多大的空间,小了怕不够,多了又浪费。要转换的信息不是自己生成的,是从外面读的,不好设上限

to stidio_zhougang(回头是岸)
string和CString能直接存取其中的内容吗?起码string是不行的,只能得到const char*指针,得不到char*
maoxianwang 2002-09-06
  • 打赏
  • 举报
回复
大家都是对的
yhlubber 2002-09-05
  • 打赏
  • 举报
回复
不如用一个足够大的栈内存,来一个char buff[max]就行了,速度上也比较快,也不用申请,释放。
fqcd555 2002-09-05
  • 打赏
  • 举报
回复
up
Tommy 2002-09-05
  • 打赏
  • 举报
回复
我查了一下资料,vector并没有保证其元素是连续存放的,只不过一般都会这样实现。

只要有一块受控的空间,就算还是需要自己转换为string也好啊。我主要觉得总要自己进行空间管理比较烦。

我现在是这样用的:
autoptr<char> ap(new char[wcstombs(NULL, wcstr, cwch)]);
wcstombs(ap.get(), wcstr, cwch);

要做几次转换的话(比如用ldap时,返回的是UTF-8字符串,要先变为Unicode,再变为ansi),就需要定义几次,比较麻烦,而且每次都要new和delete,如果次数多的话,耗费也挻大的,用static变量的话,可以节省不少,不过又要自己判断buffer是否够大并重分配空间,代码又要增多了:( 不知各位大虾是怎样处理这个问题的呢?
max_welcome 2002-09-05
  • 打赏
  • 举报
回复
来晚了,UP
anrxhzh 2002-09-05
  • 打赏
  • 举报
回复
typedef std::vector<char> strbuf;
strbuf b( wcstombs(NULL, wcstr, cwch) );
wcstombs( &strbuf[0], wcstr, cwch );

好像只有这种方法,如果要把结果当作字符串来操作,还是不可避免要将strbuf 转换为std::string。
SHIZUMARU 2002-09-05
  • 打赏
  • 举报
回复
没有办法,除非你自己重新写那个函数。
sans 2002-09-05
  • 打赏
  • 举报
回复
使用c++的标准类string

70,023

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧