The topics in this section describe programming by using CString.
CString, CStringA, and CStringW are Microsoft-specific string classes that are available for general C++ development.
A CStringA object contains string data that is based on the char type, and supports single-byte and multibyte (MBCS) strings. Similarly, a CStringW object contains string data that is based on the wchar_t type, and supports Unicode strings. A CString object supports either the char type or the wchar_t type. Which one it supports depends on which one of the symbols, MBCS or UNICODE, is defined at compile time.
A CString object keeps character data in a CStringData object. CString accepts null-terminated C-style strings, but does not retain the null character in the stored character data. Instead, CString tracks string length. CString does provide a null terminator when it exports a C-style string. You can insert a null character amidst stored character data, but it may produce unexpected results.
CString is used in native projects. For managed-code (C++/CLI) projects, use System::String.
CString, CStringA, and CStringW are defined in atlstr.h and exported from MFC90.dll. CStringT is defined in cstringt.h. The following set of string classes can be used without linking an MFC library, with or without CRT support: CAtlString, CAtlStringA, and CAtlStringW.
The CString, CStringA, and CStringW classes are instances of a class template called CStringT. They take advantage of a template programming technique called specialization. Each is implemented as a typedef based on specializing the template class CStringT for the type of character data they support. They do not define their own methods. Instead, they rely on those defined by CStringT, specialized to work with the character data that they contain.
To add more capabilities than CString, CStringA, or CStringW currently offer, consider creating a subclass of CStringT that contains the additional features. Then create an instance that is similar to CString but is based on the subclass of CStringT.