当前位置:  开发笔记 > 编程语言 > 正文

CString到char*

如何解决《CString到char*》经验,为你挑选了2个好方法。

我们在大多数代码中都使用CString类.但有时我们需要转换为char*.目前我们一直在使用variable.GetBuffer(0)这样做,这似乎有效(这主要发生在将Csting传递给函数需要char*的函数中).该功能接受了这一点,我们继续前进.

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

我理解它的工作方式是它将一个char指针传递给指向CString中第一个字符的函数,并且一切正常.

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



1> Mark Ransom..:

如果您的函数只需要读取字符串而不修改它,请将它们更改为接受const char *而不是char *.该CString会自动转换为你,这是多么大多数MFC职能的工作,这真的很方便.(实际上MFC使用LPCTSTR,它是 - 的同义词const TCHAR *- 适用于MBC和Unicode版本).

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

正如其他人所提到的,你需要使用ReleaseBuffer之后GetBuffer.您无需为转换而执行此操作const char *.



2> 小智..:

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

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

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

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

但是,如果你传递一个数字,比如GetBuffer(N)就说N,如果N大于缓冲区的当前长度,那么该函数通过分配更多内存来确保返回的缓冲区至少与N一样大.

干杯,拉杰什.MVP,Visual ++.

推荐阅读
殉情放开那只小兔子
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有