c++ - CString 到 char*

标签 c++ mfc memory-leaks cstring

我们在大部分代码中都使用了 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/

相关文章:

c++ - 一个程序会分配多少栈内存

c++ - 从 Visual C++ 6.0 到 Visual Studio 2012 的转换问题

visual-c++ - 可视化代表电信网络的软件

c++ - 如何安全地填充 Boosts 的指针容器?

c++ - 在 C++ 类中的指针成员

c++ - 检查字符串字符和长度

c++ - FFMPEG 解码 - 内存泄漏

Android:浅堆和保留堆有什么区别

c++ - 有符号字节和奇偶校验字节的区别

c++ - 维护最近的文件列表