CString::GetBuffer(int nMinBufLength);CString::ReleaseBuffer(int nNewLength)
来源:互联网 发布:买空调要注意什么 知乎 编辑:程序博客网 时间:2024/05/18 12:44
LPTSTR CString::GetBuffer(int nMinBufLength)
{
ASSERT(nMinBufLength >= 0);
if (GetData()->nRefs > 1 || nMinBufLength > GetData()->nAllocLength)
{
#ifdef _DEBUG
// give a warning in case locked string becomes unlocked
if (GetData() != _afxDataNil && GetData()->nRefs < 0)
TRACE0("Warning: GetBuffer on locked CString creates unlocked CString!\n");
#endif
// we have to grow the buffer
CStringData* pOldData = GetData();
int nOldLen = GetData()->nDataLength; // AllocBuffer will tromp it
if (nMinBufLength < nOldLen)
nMinBufLength = nOldLen;
AllocBuffer(nMinBufLength);
memcpy(m_pchData, pOldData->data(), (nOldLen+1)*sizeof(TCHAR));
GetData()->nDataLength = nOldLen;
CString::Release(pOldData);
}
ASSERT(GetData()->nRefs <= 1);
// return a pointer to the character storage for this string
ASSERT(m_pchData != NULL);
return m_pchData;
}
void CString::ReleaseBuffer(int nNewLength)
{
CopyBeforeWrite(); // just in case GetBuffer was not called
if (nNewLength == -1)
nNewLength = lstrlen(m_pchData); // zero terminated
ASSERT(nNewLength <= GetData()->nAllocLength);
GetData()->nDataLength = nNewLength;
m_pchData[nNewLength] = '\0';
}
{
ASSERT(nMinBufLength >= 0);
if (GetData()->nRefs > 1 || nMinBufLength > GetData()->nAllocLength)
{
#ifdef _DEBUG
// give a warning in case locked string becomes unlocked
if (GetData() != _afxDataNil && GetData()->nRefs < 0)
TRACE0("Warning: GetBuffer on locked CString creates unlocked CString!\n");
#endif
// we have to grow the buffer
CStringData* pOldData = GetData();
int nOldLen = GetData()->nDataLength; // AllocBuffer will tromp it
if (nMinBufLength < nOldLen)
nMinBufLength = nOldLen;
AllocBuffer(nMinBufLength);
memcpy(m_pchData, pOldData->data(), (nOldLen+1)*sizeof(TCHAR));
GetData()->nDataLength = nOldLen;
CString::Release(pOldData);
}
ASSERT(GetData()->nRefs <= 1);
// return a pointer to the character storage for this string
ASSERT(m_pchData != NULL);
return m_pchData;
}
void CString::ReleaseBuffer(int nNewLength)
{
CopyBeforeWrite(); // just in case GetBuffer was not called
if (nNewLength == -1)
nNewLength = lstrlen(m_pchData); // zero terminated
ASSERT(nNewLength <= GetData()->nAllocLength);
GetData()->nDataLength = nNewLength;
m_pchData[nNewLength] = '\0';
}
- CString::GetBuffer(int nMinBufLength);CString::ReleaseBuffer(int nNewLength)
- CString GetBuffer() and ReleaseBuffer()
- CString GetBuffer() and ReleaseBuffer()
- Getbuffer ReleaseBuffer Cstring
- Getbuffer ReleaseBuffer Cstring
- CString之GetBuffer,ReleaseBuffer
- CString::GetBuffer、ReleaseBuffer函数
- Cstring GetBuffer 和 ReleaseBuffer
- CString 中的getbuffer ReleaseBuffer
- Getbuffer ReleaseBuffer Cstring
- CString的GetBuffer ReleaseBuffer
- CString::GetBuffer()和CString::ReleaseBuffer()
- CString's GetBuffer & ReleaseBuffer
- CString 的getbuffer和releasebuffer~
- CString::GetBuffer() 不一定要ReleaseBuffer()
- CString::GetBuffer/ReleaseBuffer 技术内幕
- CString GetBuffer()和ReleaseBuffer()分析
- MFC CString GetBuffer ReleaseBuffer方法
- 开源 免费 java CMS - FreeCMS1.2-功能说明-评论管理
- Proteus20个应用技巧
- php防注入函数
- java继承、多台、抽象类概念
- autocad的几个学习要点
- CString::GetBuffer(int nMinBufLength);CString::ReleaseBuffer(int nNewLength)
- android修改不起作用or细微修改导致布局大乱甚至出现莫名其妙的异常
- Android底层开发之旅—蓝牙系统分析
- 设为首页 加入收藏(代码)
- 将string转换成char*
- 如何在 Eclipse 中显示行号
- IAR的一些基本设置
- android 连网状态检测
- Linux Shell 正则表达式之 通配符、元字符、转义符使用实例介绍