dcsimg

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.



This article was originally published on April 16th, 2002

Most Popular Programming Stories

More for Developers

RSS Feeds

Thanks for your registration, follow us on our social networks to keep up-to-date