C++ CString到char*
我们在大部分代码中都使用CString类。然而,有时我们需要转换为char*。目前,我们一直在使用variable.GetBuffer(0)来实现这一点,这似乎是可行的(这主要发生在将Csting传递到一个函数时,该函数需要一个char*)。函数接受这一点,我们继续 然而,我们最近开始担心这是如何工作的,以及是否有更好的方法来做到这一点 我理解它的工作方式是,它将一个char指针传递到指向CString中第一个字符的函数中,所有操作都很好C++ CString到char*,c++,mfc,memory-leaks,cstring,C++,Mfc,Memory Leaks,Cstring,我们在大部分代码中都使用CString类。然而,有时我们需要转换为char*。目前,我们一直在使用variable.GetBuffer(0)来实现这一点,这似乎是可行的(这主要发生在将Csting传递到一个函数时,该函数需要一个char*)。函数接受这一点,我们继续 然而,我们最近开始担心这是如何工作的,以及是否有更好的方法来做到这一点 我理解它的工作方式是,它将一个char指针传递到指向CString中第一个字符的函数中,所有操作都很好 我想我们只是担心内存泄漏或任何不可预见的情况,这可能不是
我想我们只是担心内存泄漏或任何不可预见的情况,这可能不是一个好主意。请尝试上的文档以获取帮助。当您调用getbuffer函数时,它会为您分配内存。
完成后,您需要调用releasebuffer来解除分配它如果您的函数只需要读取字符串而不需要修改它,请将它们更改为接受
const char*
,而不是char*
。CString
将为您自动转换,这是大多数MFC函数的工作方式,非常方便。(实际上,MFC使用的是LPCTSTR
,它是const TCHAR*
的同义词,适用于MBC和Unicode版本)
如果需要修改字符串,GetBuffer(0)
是非常危险的-它不一定会为生成的字符串分配足够的内存,并且可能会出现一些缓冲区溢出错误
正如其他人所提到的,您需要在GetBuffer
之后使用ReleaseBuffer
。转换为const char*
@OP:
>>>我想我们只是担心内存泄漏或任何
您好,调用GetBuffer方法不会导致任何内存泄漏。因为析构函数无论如何都要释放缓冲区。但是,其他人已经警告过您调用此方法的潜在问题
@Can>>>当您调用getbuffer函数时,它会为您分配内存
这种说法并不完全正确。GetBuffer(0)不分配任何内存。它只返回一个指向内部字符串缓冲区的指针,该缓冲区可用于直接从CString类的“外部”操作字符串
但是,如果您传递一个数字,比如像GetBuffer(N)一样对它传递N,并且如果N大于缓冲区的当前长度,那么函数通过分配更多内存来确保返回的缓冲区至少与N一样大
干杯,
拉杰什。
MVP,Visual++。我已经trid了strtol(),它不会自动从CString转换为const char*。你是怎么做到的?我还尝试了类型转换,但也不起作用。@henryyao使用
\u tcstol
。