看到有的对ReleaseBuffer的认识不太对,所以忍不住要声明一下。BTW.所有资料皆来自MSDN,其实大家大可不必什么都拿来问,查一查MSDN豁然开朗,而且正确率有保证。
CString的GetBuffer返回指向CString内部字符串的指针,如果在外部对这个指针所指向的字符串进行了修改操作的话,则一定要在修改完毕后调用ReleaseBuffer( int nNewLength = -1 )。参数为-1时,会认为字符串是Null-terminated的,调用此方法会自动找到首个null字符作为字符串的结尾;参数不为-1时,此方法会以参数作为字符串长度,并将字符串作为非nll-terminated的来对待。当然,无论如何,如果长度发生变化,内存会自动调整。
并不是有些人所说的,GetBuffer是分配出一片空间,而ReleaseBuffer是回收这片空间。
这是我看MSDN后的看法,不对的地方请大家批评。
CString的GetBuffer返回指向CString内部字符串的指针,如果在外部对这个指针所指向的字符串进行了修改操作的话,则一定要在修改完毕后调用ReleaseBuffer( int nNewLength = -1 )。参数为-1时,会认为字符串是Null-terminated的,调用此方法会自动找到首个null字符作为字符串的结尾;参数不为-1时,此方法会以参数作为字符串长度,并将字符串作为非nll-terminated的来对待。当然,无论如何,如果长度发生变化,内存会自动调整。
并不是有些人所说的,GetBuffer是分配出一片空间,而ReleaseBuffer是回收这片空间。
这是我看MSDN后的看法,不对的地方请大家批评。
解决方案 »
- MFC 按钮
- 请教各位大虾一个线程响应函数的问题?
- CFileDialog类支持选择10000个以上文件吗??
- 总技术分超过10000了,散分。
- VS.NET2005 用哪个版本?
- CButton 的继承类的虚函数 DrawItem 由什么消息触发运行,我做的为什么不远行?
- vc+ado+oralce,unspecified error!
- 请高人指点安装2000的问题
- dll访问地址错误
- CObList 清空问题
- 在线急等回答!!!!!!!!!!!!!!!!!!!(为什么用VC6.0的向导建立一个console程序,并且包含“An application that supports MFC".程序退出的
- 关于屏蔽系统热键问题(能否用底层键盘钩子实现)
2 使用由 GetBuffer 返回的指针来直接将字符写入 CString 对象中。
3 调用 CString 对象的 ReleaseBuffer 来更新所有的内部 CString 状态信息,如字符串的长度。直接修改完 CString 对象的内容之后,在调用任何其他 CString 成员函数之前必须调用 ReleaseBuffer。