GetBuffer(0)

         如果你需要修改   CString   中的内容,它有一个特殊的方法可以使用,那就是  GetBuffer,它的作用是返回一个可写的缓冲指针。 如果你打算修改字符或者截短字符串,你完全可以这样做:  
   
  CString   s(_T("File.ext"));  
  LPTSTR   p   =   s.GetBuffer();  
  LPTSTR   dot   =   strchr(p,  '' . '');  
  if(p   !=   NULL)  
  *p   =   _T(''/0'');  
  s.ReleaseBuffer();  
    这是 GetBuffer   的第一种用法,也是最简单的一种,不用给它传递参数,它使用默认值 0,意思是:“给我这个字符串的指针,我保证不加长它”。当你调用 ReleaseBuffer   时,字符串的实际长度会被重新计算,然后存入 CString 对象中。  
    必须强调一点,在 GetBuffer  和  ReleaseBuffer  之间这个范围,一定不能使用你要操作的这个缓冲的  CString   对象的任何方法。因为 ReleaseBuffer 被调用之前,该 CString 对象的完整性得不到保障。研究以下代码:  
   
  CString   s(...);  
   
  LPTSTR   p   =   s.GetBuffer();  
   
  //...   这个指针   p   发生了很多事情  
   
  int   n   =   s.GetLength();   // 有可能给出错误的答案!!!  
   
  s.TrimRight();   // 不能保证能正常工作!!!!  
   
  s.ReleaseBuffer();   //  现在应该   OK  
   
  int   m   =   s.GetLength();   // 这个结果可以保证是正确的。  
   
  s.TrimRight();   //   将正常工作。

   
    假设你想增加字符串的长度,你首先要知道这个字符串可能会有多长,好比是声明字符串数组的时候用:     
          char   buffer[1024];  
          表示 1024 个字符空间足以让你做任何想做得事情。

          在   CString   中与之意义相等的表示法:   
          LPTSTR   p   =   s.GetBuffer(1024);  
    调用这个函数后,你不仅获得了字符串缓冲区的指针,而且同时还获得了长度至少为 1024 个字符的空间(注意,我说的是“字符”,而不是“字节”,因为   CString   是以隐含方式感知   Unicode   的)。  
    同时,还应该注意的是,如果你有一个常量串指针,这个串本身的值被存储在只读内存中,如果试图存储它,即使你已经调用了 GetBuffer ,并获得一个只读内存的指针,存入操作会失败,并报告存取错误。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值