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,比较麻烦。

有这样的类吗?
...全文
1447 17 打赏 收藏 转发到动态 举报
写回复
用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
【为什么还需要学习C++?】 你是否接触很多语言,但从来没有了解过编程语言的本质?你是否想成为一名资深开发人员,想开发别人做不了的高性能程序?你是否经常想要窥探大型企业级开发工程的思路,但苦于没有基础只能望洋兴叹? 那么C++就是你个人能力提升,职业之路进阶的不二之选。【课程特色】 1.课程共19大章节,239课时内容,涵盖数据结构、函数、类、指针、标准库全部知识体系。2.带你从知识与思想的层面从0构建C++知识框架,分析大型项目实践思路,为你打下坚实的基础。3.李宁老师结合4大国外顶级C++著作的精华为大家推出的《征服C++11》课程。【学完后我将达到什么水平?】 1.对C++的各个知识能够熟练配置、开发、部署;2.吊打一切关于C++的笔试面试题;3.面向物联网的“嵌入式”和面向大型化的“分布式”开发,掌握职业钥匙,把握行业先机。【面向人群】 1.希望一站式快速入门的C++初学者; 2.希望快速学习 C++、掌握编程要义、修炼内功的开发者; 3.有志于挑战更高级的开发项目,成为资深开发的工程师。 【课程设计】 本课程包含3大模块基础篇本篇主要讲解c++的基础概念,包含数据类型、运算符等基本语法,数组、指针、字符串等基本词法,循环、函数、类等基本句法等。进阶篇本篇主要讲解编程常用的一些技能,包含类的高级技术、类的继承、编译链接和命名空间等。提升篇:本篇可以帮助学员更加高效的进行c++开发,其包含类型转换、文件操作、异常处理、代码重用等内容。

69,382

社区成员

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

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