CString to char*(CString 到 char*)
问题描述
我们在大部分代码中都使用 CString 类.但是有时我们需要转换为 char *.目前我们一直在使用 variable.GetBuffer(0) 来做这件事,这似乎有效(这主要发生在将 Csting 传递到函数需要 char * 的函数时).该函数接受这一点,我们继续前进.
然而,我们最近开始担心这是如何运作的,以及是否有更好的方法来做到这一点.
我理解它的工作方式是将一个字符指针传递给指向 CString 中第一个字符的函数,并且一切正常.
我想我们只是担心内存泄漏或任何不可预见的情况,这可能不是一个好主意.
如果你的函数只需要读取字符串而不需要修改它,请将它们更改为接受 const char * 而不是
char*
.CString
将自动为您转换,这是大多数 MFC 函数的工作方式,而且非常方便.(实际上 MFC 使用 LPCTSTR
,它是 const TCHAR *
的同义词 - 适用于 MBC 和 Unicode 构建).
如果您需要修改字符串,GetBuffer(0)
非常危险 - 它不一定会为结果字符串分配足够的内存,并且您可能会遇到一些缓冲区溢出错误.>
正如其他人提到的,您需要在 GetBuffer
之后使用 ReleaseBuffer
.您无需为转换为 const char *
执行此操作.
We are using the CString class throughout most of our code. However sometimes we need to convert to a char *. at the moment we have been doing this using variable.GetBuffer(0) and this seems to work ( this mainly happens when passing the Csting into a function where the function requires a char *). The function accepts this and we keep going.
However we have lately become worried about how this works, and whether there is a better way to do it.
The way i understand it to work is it passes a char pointer into the function that points at the first character in the CString and all works well.
I Guess we are just worried about memory leaks or any unforseen circumstances where this might not be a good idea.
If your functions only require reading the string and not modifying it, change them to accept const char *
instead of char *
. The CString
will automatically convert for you, this is how most of the MFC functions work and it's really handy. (Actually MFC uses LPCTSTR
, which is a synonym for const TCHAR *
- works for both MBC and Unicode builds).
If you need to modify the string, GetBuffer(0)
is very dangerous - it won't necessarily allocate enough memory for the resulting string, and you could get some buffer overrun errors.
As has been mentioned by others, you need to use ReleaseBuffer
after GetBuffer
. You don't need to do that for the conversion to const char *
.
这篇关于CString 到 char*的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:CString 到 char*
基础教程推荐
- Windows Media Foundation 录制音频 2021-01-01
- 如何在不破坏 vtbl 的情况下做相当于 memset(this, ...) 的操作? 2022-01-01
- 如何“在 Finder 中显示"或“在资源管理器中显 2021-01-01
- 管理共享内存应该分配多少内存?(助推) 2022-12-07
- 在 C++ 中循环遍历所有 Lua 全局变量 2021-01-01
- 使用从字符串中提取的参数调用函数 2022-01-01
- 为什么语句不能出现在命名空间范围内? 2021-01-01
- 如何使图像调整大小以在 Qt 中缩放? 2021-01-01
- 从 std::cin 读取密码 2021-01-01
- 为 C/C++ 中的项目的 makefile 生成依赖项 2022-01-01