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 *
.