CString instead of LPCSTR

A simple routine to allow CString formatted strings to be used wherever a regular LPCSTR would be used, without needing to define a CString (ie, dynamically created and formatted LPCSTR strings)

.

Environment: VC6 SP4

Well, I’ve seen other people asking for a class like this, and I sure wanted one, so I finally wrote one.

Suppose you want to call a routine with a dynamically constructed LPCSTR. You would call it like this:

SampleRoutine( (LPCSTR) csFMT(
                  "Sample dynamic string count(%d) name(%s)",
                  nAnInteger,
                  szAZeroTerminatedString));

The Microsoft CString class provides a Format member routine which
provides sprintf-type formatting, without the need to allocate a buffer.
The class CString automatically calculates the size of the buffer required,
and allocates it. A CString variable, however, must first be declared. This routine allows the CString Format member routine to be used, without needing to declare
a CString.

Here is the sample code without using the “csFmt” routine:

  CString csTemp;
  CsTemp.Format("Sample dynamic string count(%d) name(%s)",
                nAnInteger, szAZeroTerminatedString);
  SampleRoutine((LPCSTR) csTemp);

This method doesn’t require any subclassing, and is only a short < 10 line routine.


CString csFMT(LPCSTR lpszFormat, …)
{
CString csStr;

va_list argList;
va_start(argList, lpszFormat);
csStr.FormatV(lpszFormat, argList);
return csStr;
}

Downloads

You can cut & paste code from above.

More by Author

Get the Free Newsletter!

Subscribe to Developer Insider for top news, trends & analysis

Must Read