首页
社区
课程
招聘
[求助]问一个关于CString 的 GetBuffer 的问题
发表于: 2008-7-21 01:01 6609

[求助]问一个关于CString 的 GetBuffer 的问题

2008-7-21 01:01
6609
我在将  一个 CString  转化成 char * 时  是这样做的

strcpy(charbuf,str.GetBuffer(0));

也就是用的 copy 的时候用 str.GetBuffer(0) .我也不太清楚为什么...因为别人这么写

我就这么学着的!!

谁帮我解释一下 GetBuffer(0) 是什么意思?
我的理解 是锁定内存..给他分配内存空间?

2.另个要问题的是 据说 在 调用了 GetBuffer 后...在没有调用 ReleaseBuffer 之前

对CString   的操作可能会得到不正确的结果

比如 GetLength....等等

这 "可能" 二字..让我很为担心..

特此发贴确认一下!!!

[课程]Linux pwn 探索篇!

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 202
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
只是复制用
strcpy(charbuf,(char*)(const char*)str);
str.GetBuffer()
没有调用ReleaseBuffer 会泄露
麻烦
2008-7-22 09:41
0
雪    币: 1074
活跃值: (160)
能力值: ( LV13,RANK:760 )
在线值:
发帖
回帖
粉丝
3
楼上的说得不完整哈,看看MSN吧!
  GetBuffer(0)返回的是指向CString对象所构造的字串指针,为GetBuffer(0)由系统自动计算字串所要的空间长度,但要求是规则的含\0字串,否则得自己给出长度,如str.GetBuffer(20)。
  如果由GetBuffer所得到的字串指针修改了CString字串,那么必须调用ReleaseBuffer()来重新计算字串的长度,否则会出错,或者结果不正确!
2008-7-23 11:08
0
雪    币: 111
活跃值: (626)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
CString 是属于Utility类, 本身封装了对字符串的操作, 所以, 人为的取得缓冲区意味着可能会进行不安全操作, 因此, CString对象在表达式或等式的右表达式, 建议用类型操作符 LPCTSTR()来取字符串, 其它情况应该要用方法和本身的操作来做.

所以一般情况下不要使用GetBuffer & ReleaseBuffer这种方式, 而且大多数情况下也是不需要这么做的, 取字符串更安全的方法是 LPCTSTR(), 赋值则是operator =(), 追加则是Append() 或 operator +().

CString使用是很方便的, MFC和WTL甚至是ATL新版本中实现的版本都一样, 效率很高, 而且比较智能, 打个比方, CString对象被赋于了UNICODE字符, 而然你又想把该对象以ASCII方式输出, 那么LPCTSTR()就能自动地帮你完成转换的操作. 当然对OLE String的支持也是很不错的.

自己看看CString的实现吧, 慢慢体会会有不少收获的 :)
2008-7-25 18:26
0
游客
登录 | 注册 方可回帖
返回
//