`

关于CString::ReleaseBuffer {MFC}

    博客分类:
  • C++
阅读更多
刚刚跟朋友讨论了这个问题。就是CString::ReleaseBuffer这个东西有什么用。
    其实CString::ReleaseBuffer只是一个形象的说法,完全是跟GetBuffer对应而起的名字。我觉得如果函数名改为UpdateBuffer的就不会出现这种误解
    先来看一段代码:
    CString s="hello";
    LPTSTR ps=s.GetBuffer();
    strcpy(ps,"hi");
    s.ReleaseBuffer();
    此时调用s.GetLength()获取的值是2,正确无误。但如果注释掉s.ReleaseBuffer()这一行,s.GetLength()获取的值则是5,哈哈,错了。
    怎么会这样呢,我们来看看MFC中ReleaseBuffer的代码:
     void ReleaseBuffer( int nNewLength = -1 )
     {
          if( nNewLength == -1 )
          {
               nNewLength = StringLength( m_pszData );
          }
          SetLength( nNewLength );
     }
    很明显ReleaseBuffer只有一个作用,就是更新字符串的长度。CString内,GetLength获取字符串长度并不是动态计算的,而是在赋值操作后计算并保存在一个int变量内的,当通过GetBuffer直接修改CString时,那个int变量并不可能自动更新,于是便有了ReleaseBuffer。
    其实,计算长度还能用strlen(),这个就算不ReleaseBuffer也不会出错,但如果不ReleaseBuffer,在+=这种赋值时字符串很可能会跟想要得到的不同。
分享到:
评论

相关推荐

    mfc关于CString的所有操作

    在Microsoft Foundation Classes (MFC)库中,`CString`是一个非常重要的类,它提供了一种方便的方式来处理和操作字符串。`CString`类是基于C++的,它在内存管理、字符串连接、格式化等方面提供了很多便利的方法。...

    CString使用方法~

    在C++编程中,`CString`是MFC(Microsoft Foundation Classes)框架下用于处理字符串的一个重要类。它提供了丰富的接口来处理文本数据,包括字符串的比较、搜索、修改以及格式化等操作。下面我们将深入探讨`CString`...

    CString char string format

    - `GetBuffer`方法用于获取`CString`内部的缓冲区,如果使用了`GetBuffer`,那么必须调用`ReleaseBuffer`方法来释放缓冲区。 - 如果不释放缓冲区,可能会导致内存泄漏。 3. **关于字符串转换中的异常处理** - ...

    CString用法

    在C++编程中,尤其是在使用Visual C++进行Windows应用程序开发时,`CString`类作为MFC框架中的一个核心组件,被广泛应用于字符串处理任务中。下面将详细介绍`CString`类下的主要方法及其应用示例。 #### 1. `...

    MFC各种数据类型转换

    需要注意的是,在CString转string时,需要使用GetBuffer()函数获取CString的缓冲区,然后将其转换为string,但是在使用GetBuffer()函数时,需要调用ReleaseBuffer()函数来释放缓冲区所占的空间。 CString与char*...

    CString 操作指南 CString 是一种很有用的数据类型。它们很大程度上简化了MFC中的许多操作,使得MFC在做字符串操作的时候方便了很多。

    这篇文章详细介绍了使用CString进行字符串操作的各种技巧,包括连接、格式化、类型转换等,帮助开发者更好地理解和利用MFC中的CString类,提高代码的可读性和效率。对于那些从纯C背景过渡到MFC编程的开发者,掌握...

    VC中CString的成员函数.pdf

    在讨论VC(Visual C++)编程中CString类的成员函数时,我们首先需要了解CString类是MFC(Microsoft Foundation Classes)库中提供的一个用于处理字符串的类。CString类封装了C风格字符串的操作,使得对字符串的处理...

    ( C++_MFC_CString

    标题中的"C++_MFC_CString"提示我们讨论的重点是C++编程语言中与Microsoft Foundation Classes (MFC)库相关的CString类。MFC是微软为Windows应用程序开发提供的一套类库,它基于C++,极大地简化了Windows API的使用...

    从MFC中抽出的CString类

    【标题】"从MFC中抽出的CString类"是一个独立化的字符串处理类,它源于Microsoft Foundation Class (MFC) 库。MFC 是一个 C++ 类库,它为Windows应用程序开发提供了一种面向对象的框架。CString 类是MFC中的一个核心...

    CString工作原理和常见问题分析

    `CString`是Microsoft Foundation Classes (MFC)框架中的一个核心组件,主要用于处理字符串数据。相比于C语言中的传统字符串处理方式,`CString`提供了一种更加安全和高效的解决方案。在本篇文章中,我们将深入探讨`...

    VC/MFC.CString操作指南

    【VC/MFC.CString操作指南】深入解析 在MFC编程中,`CString`是一个非常重要的数据类型,它为字符串处理提供了极大的便利。相对于传统的C风格字符串,`CString`不仅简化了内存管理,还提供了丰富的操作函数。这篇...

    MFC、C++、C中字符类型CStringintstringchar知识[借鉴].pdf

    本文将详细讨论在MFC、C++、C语言中如何进行字符类型间的转换,包括CString、int、string以及char*。 首先,让我们关注C++中的`std::string`和MFC中的`CString`类。`std::string`是C++标准库中的一个类,用于表示可...

    BSTR和CString和char的转换

    ### BSTR和CString和char的转换 #### 一、引言 在开发过程中,不同的字符串类型之间经常需要互相转换以适应不同的应用场景。本篇文章详细介绍了`BSTR`、`CString`与`char`类型的字符串相互转换的方法。这些转换在...

    C++:CString转换

    MFC库中的`CString`类提供了方便的字符串操作,但在与标准C++库函数交互时,可能需要将其转换为`std::string`或`char*`等类型。本文将详细介绍如何在`CString`、`std::string`、`char*`、`char[]`、`int`和`float`...

    CString操作大全指南

    通过学习,开发者可以更好地理解和运用CString在MFC环境中处理字符串。 【标签】:CString操作 【正文】: 1. CString对象的连接 CString提供了简便的字符串连接功能,可以通过"+"操作符直接将两个CString对象...

    一篇关于CString类型转换的文章

    `CString` 是 MFC(Microsoft Foundation Classes)框架中的一个核心类,主要用于处理各种字符串操作。由于 `CString` 支持多种字符串类型,包括多字节字符集(MBCS)和 Unicode 字符串,因此它在 MFC 应用开发中...

    cstring的相关知识.docx

    总结来说,CString是MFC框架中处理字符串的强大工具,它支持多种字符串转换和操作,同时也需要了解其他常见的字符串类型如BSTR、char*、wstring等,以及它们之间的转换方法。掌握这些转换和操作有助于提高编程效率,...

    CString操作指南

    【描述】:该文详细介绍了如何在MFC环境中有效使用CString类,以方便字符串操作。 【标签】:“CString操作指南” **知识点详解:** 1. **CString对象的连接** CString类的一个显著优点是字符串连接的简便性。...

    CString类型转换

    另外,还可以使用 `CString::GetBuffer()` 和 `ReleaseBuffer()` 来直接获取可修改的字符数组指针,这样可以更高效地处理字符串。 #### 5. CString 转换为 BSTR `BSTR` 是 COM 组件中的字符串类型,在进行跨语言...

Global site tag (gtag.js) - Google Analytics