CString instead of LPCSTR
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.
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.
Comments
If only Format whould ??
Posted by Legacy on 06/04/2002 12:00amOriginally posted by: Boaz Harrosh
If CString::Format was defined as
CString& AFX_CDECL Format(LPCTSTR lpszFormat, ...);
and not:
void AFX_CDECL Format(LPCTSTR lpszFormat, ...);
than we could just do:
cout << (LPCSTR)CString().Format("%s" ,"yes it works this way") ;
A constructor is callable in C++. It is just like a type cast.
Another way
Posted by Legacy on 04/17/2002 12:00amOriginally posted by: Mathieu Fr.