我们在大多数代码中都使用CString类.但有时我们需要转换为char*.目前我们一直在使用variable.GetBuffer(0)这样做,这似乎有效(这主要发生在将Csting传递给函数需要char*的函数中).该功能接受了这一点,我们继续前进.
然而,我们最近担心这是如何工作的,以及是否有更好的方法来做到这一点.
我理解它的工作方式是它将一个char指针传递给指向CString中第一个字符的函数,并且一切正常.
我猜我们只是担心内存泄漏或任何不可预知的情况,这可能不是一个好主意.
如果您的函数只需要读取字符串而不修改它,请将它们更改为接受const char *
而不是char *
.该CString
会自动转换为你,这是多么大多数MFC职能的工作,这真的很方便.(实际上MFC使用LPCTSTR
,它是 - 的同义词const TCHAR *
- 适用于MBC和Unicode版本).
如果需要修改字符串,GetBuffer(0)
则非常危险 - 它不一定会为结果字符串分配足够的内存,并且可能会出现一些缓冲区溢出错误.
正如其他人所提到的,你需要使用ReleaseBuffer
之后GetBuffer
.您无需为转换而执行此操作const char *
.
@ OP: >>>我猜我们只是担心内存泄漏或任何......
嗨,调用GetBuffer方法不会导致任何内存泄漏.因为析构函数无论如何都要释放缓冲区.但是,其他人已经警告过您调用此方法的潜在问题.
@Can >>> 当你调用getbuffer函数时,它会为你分配内存.
这种说法并不完全正确.GetBuffer(0)不分配任何内存.它只返回一个指向内部字符串缓冲区的指针,该指针可用于直接从CString类的"外部"操作字符串.
但是,如果你传递一个数字,比如GetBuffer(N)就说N,如果N大于缓冲区的当前长度,那么该函数通过分配更多内存来确保返回的缓冲区至少与N一样大.
干杯,拉杰什.MVP,Visual ++.