能力值:
( LV2,RANK:10 )
|
-
-
2 楼
只是复制用
strcpy(charbuf,(char*)(const char*)str);
str.GetBuffer()
没有调用ReleaseBuffer 会泄露
麻烦
|
能力值:
( LV13,RANK:760 )
|
-
-
3 楼
楼上的说得不完整哈,看看MSN吧!
GetBuffer(0)返回的是指向CString对象所构造的字串指针,为GetBuffer(0)由系统自动计算字串所要的空间长度,但要求是规则的含\0字串,否则得自己给出长度,如str.GetBuffer(20)。
如果由GetBuffer所得到的字串指针修改了CString字串,那么必须调用ReleaseBuffer()来重新计算字串的长度,否则会出错,或者结果不正确!
|
能力值:
( 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的实现吧, 慢慢体会会有不少收获的 :)
|
|
|