首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CString to char*

CString to char*
EN

Stack Overflow用户
提问于 2009-02-18 01:25:58
回答 4查看 35.5K关注 0票数 17

我们在大部分代码中都使用了CString类。但是,有时我们需要转换为char *。目前,我们已经使用variable.GetBuffer(0)实现了这一点,这似乎是可行的(这主要发生在将Csting传递到需要char *的函数中时)。函数接受了这一点,我们继续前进。

然而,我们最近开始担心这是如何工作的,以及是否有更好的方法来做到这一点。

我理解它的工作方式是,它将一个字符指针传递到指向CString中第一个字符的函数中,一切都很正常。

我猜我们只是担心内存泄漏或任何不可预见的情况,这可能不是一个好主意。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-02-18 01:37:06

如果您的函数只需要读取字符串,而不需要修改它,请将它们更改为接受const char *而不是char *CString会自动为你转换,这就是大多数MFC函数的工作方式,非常方便。(实际上MFC使用LPCTSTR,它是const TCHAR *的同义词,同时适用于MBC和Unicode构建)。

如果您需要修改字符串,GetBuffer(0)是非常危险的-它不一定会为结果字符串分配足够的内存,并且您可能会得到一些缓冲区溢出错误。

正如其他人所提到的,您需要在GetBuffer之后使用ReleaseBuffer。您不需要在转换为const char *时执行此操作。

票数 24
EN

Stack Overflow用户

发布于 2009-10-06 15:46:46

@ the OP:>>>我猜我们只是担心内存泄漏或任何...

您好,调用GetBuffer方法不会导致任何内存泄漏。因为析构函数无论如何都会释放缓冲区。但是,其他人已经警告您调用此方法的潜在问题。

@Can >>>当你调用getbuffer函数时,它会为你分配内存。

这句话并不完全正确。GetBuffer(0)不分配任何内存。它只返回一个指向内部字符串缓冲区的指针,该缓冲区可用于直接从CString类“外部”操作字符串。

但是,如果您传递一个数字,就像GetBuffer(N)那样对它设为N,并且如果N大于缓冲区的当前长度,则该函数通过分配更多的内存来确保返回的缓冲区至少与N一样大。

干杯,拉杰什。最有价值的视觉++。

票数 8
EN

Stack Overflow用户

发布于 2009-02-18 01:29:13

当您调用getbuffer函数时,它会为您分配内存。使用完它后,需要调用releasebuffer来释放它。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/559483

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档