我们在大部分代码中都使用了 CString 类。但是有时我们需要转换为 char *。目前我们一直在使用 variable.GetBuffer(0) 执行此操作,这似乎有效(这主要发生在将 Csting 传递到函数需要 char * 的函数中时)。该功能接受这个,我们继续前进。
然而,我们最近开始担心它是如何工作的,以及是否有更好的方法来做到这一点。
我理解它的工作方式是它将一个 char 指针传递给指向 CString 中第一个字符的函数,并且一切正常。
我想我们只是担心内存泄漏或任何不可预见的情况,这可能不是一个好主意。
最佳答案
如果您的函数只需要读取字符串而不需要修改它,请将它们更改为接受 const char *
而不是 char *
。 CString
会自动为您转换,这是大多数 MFC 函数的工作方式,而且非常方便。 (实际上 MFC 使用 LPCTSTR
,它是 const TCHAR *
的同义词 - 适用于 MBC 和 Unicode 构建)。
如果您需要修改字符串,GetBuffer(0)
非常危险 - 它不一定会为结果字符串分配足够的内存,并且您可能会遇到一些缓冲区溢出错误。
正如其他人提到的,您需要在GetBuffer
之后使用ReleaseBuffer
。对于转换为 const char *
,您不需要这样做。
关于c++ - CString 到 char*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26021510/