看到有的对ReleaseBuffer的认识不太对,所以忍不住要声明一下。BTW.所有资料皆来自MSDN,其实大家大可不必什么都拿来问,查一查MSDN豁然开朗,而且正确率有保证。
CString的GetBuffer返回指向CString内部字符串的指针,如果在外部对这个指针所指向的字符串进行了修改操作的话,则一定要在修改完毕后调用ReleaseBuffer( int nNewLength = -1 )。参数为-1时,会认为字符串是Null-terminated的,调用此方法会自动找到首个null字符作为字符串的结尾;参数不为-1时,此方法会以参数作为字符串长度,并将字符串作为非nll-terminated的来对待。当然,无论如何,如果长度发生变化,内存会自动调整。
并不是有些人所说的,GetBuffer是分配出一片空间,而ReleaseBuffer是回收这片空间。
这是我看MSDN后的看法,不对的地方请大家批评。

解决方案 »

  1.   

    GetBuffer 和 ReleaseBuffer 成员函数使您能够访问 CString 对象的内部字符缓冲区,并直接进行修改。以下步骤显示如何使用这些函数来达到这一目的: 1 为 CString 对象调用 GetBuffer,并指定所需缓冲区的长度。 
    2 使用由 GetBuffer 返回的指针来直接将字符写入 CString 对象中。 
    3 调用 CString 对象的 ReleaseBuffer 来更新所有的内部 CString 状态信息,如字符串的长度。直接修改完 CString 对象的内容之后,在调用任何其他 CString 成员函数之前必须调用 ReleaseBuffer。