Administración de datos de cadena
Visual C++ proporciona varias maneras de administrar los datos de cadena:
Manipulación de cadenas para trabajar con cadenas terminadas en
NULL
y al estilo de CFunciones de API Win32 para administrar cadenas
Clase
CStringT
de MFC, que proporciona objetos de cadena flexibles y de tamaño ajustableClase
CStringT
, que proporciona un objeto de cadena independiente de MFC y con la misma funcionalidad queCString
Casi todos los programas funcionan con datos de cadena. La clase CString
de MFC suele ser la mejor solución para el control flexible de cadenas. A partir de la versión 7.0, CString
se puede usar en MFC o en programas independientes de esta. Tanto la biblioteca en tiempo de ejecución como CString
admiten cadenas que contienen caracteres multibyte (anchos), como en la programación de Unicode o de MBCS.
En este artículo se describen los servicios de uso general que proporciona la biblioteca de clases relacionada con la manipulación de cadenas. En este artículo se tratan los siguientes temas:
La clase CStringT
proporciona compatibilidad para manipular cadenas. Está pensada para reemplazar y ampliar la funcionalidad que se proporciona normalmente en el paquete de cadenas de biblioteca en tiempo de ejecución de C. La clase CString
proporciona funciones miembro y operadores para el control simplificado de cadenas, similares a los que se encuentran en Basic. La clase también proporciona constructores y operadores para construir, asignar y comparar CString
s y tipos de datos de cadena de C++ estándar. Dado que CString
no se deriva de CObject
, puede usar objetos CString
al margen de la mayor parte de la biblioteca MFC (Microsoft Foundation Class).
Los objetos CString
siguen la "semántica de valor". Un objeto CString
representa un valor único. Considere a CString
como una cadena real, no como un puntero a una cadena.
Un objeto CString
representa una secuencia de un número variable de caracteres. Los objetos CString
se pueden considerar como matrices de caracteres.
Unicode y MBCS proporcionan portabilidad
Con MFC versión 3.0 y posteriores, MFC, CString
incluido, está habilitado para juegos de caracteres Unicode y multibyte (MBCS). Esta compatibilidad facilita la escritura de aplicaciones portables, que se pueden compilar para caracteres Unicode o ANSI. Para habilitar esta portabilidad, cada carácter de un objeto CString
es de tipo TCHAR
, que se define como wchar_t
si define el símbolo _UNICODE
al compilar la aplicación, o como char
si no lo hace. Un carácter wchar_t
es de 16 bits de ancho. MBCS está habilitado si hace la compilación con el símbolo _MBCS
definido. MFC se crea con el símbolo _MBCS
(para las bibliotecas NAFX) o con el símbolo _UNICODE
(para las bibliotecas UAFX) definidos.
Nota:
Los ejemplos de CString
en este artículo y en los adjuntos, que tratan sobre las cadenas, muestran cadenas literales con el formato correcto para la portabilidad con Unicode mediante la macro _T
, que traduce la cadena literal a la forma:
L"literal string"
Nota:
que el compilador trata como una cadena de Unicode. Por ejemplo, el código siguiente:
CString strName = _T("Name");
Nota:
se traduce como una cadena de Unicode si _UNICODE
está definida o, si no lo está, como una cadena de ANSI. Para más información, consulte el artículo Compatibilidad con juegos de caracteres Unicode y Multibyte (MBCS).
Un objeto CString
puede almacenar hasta INT_MAX
(2 147 483 647) caracteres. El tipo de datos TCHAR
se usa para obtener o establecer caracteres individuales dentro de un objeto CString
. A diferencia de las matrices de caracteres, la clase CString
tiene una capacidad de asignación de memoria integrada. Esto permite que los objetos CString
crezcan automáticamente según sea necesario (es decir, no tiene que preocuparse por el crecimiento de un objeto CString
para ajustarse a cadenas más largas).
CStrings
y punteros const char
Un objeto CString
también puede actuar como una cadena de estilo C literal (un PCXSTR
, que es igual a const char*
si no está en Unicode). El operador de conversión CSimpleStringT::operator PCXSTR
permite sustituir libremente los objetos CString
por punteros de caracteres en las llamadas de función. El constructor CString(LPCWSTR pszSrc)
permite sustituir punteros de caracteres por objetos CString
.
No se intenta plegar los objetos CString
. Si crea dos objetos CString
que contienen Chicago
, por ejemplo, los caracteres de Chicago
se almacenan en dos lugares. (Es posible que esto no ocurra en versiones futuras de MFC, así que es mejor no fiarlo todo a esta característica).
Nota:
Use las funciones miembro CSimpleStringT::GetBuffer
y CSimpleStringT::ReleaseBuffer
cuando necesite acceder directamente a CString
como un puntero no constante a un carácter.
Nota:
Use las funciones miembro CStringT::AllocSysString
y CStringT::SetSysString
para asignar y establecer objetos BSTR
usados en Automation (anteriormente conocido como OLE Automation).
Nota:
Siempre que sea posible, asigne objetos CString
en el marco en lugar de en el montón. Esto ahorra memoria y simplifica el paso de parámetros.
La clase CString
no se implementa como una clase de colección de biblioteca MFC (Microsoft Foundation Class), aunque es cierto que los objetos CString
se pueden almacenar como elementos en colecciones.
Recuento de referencias de CString
A partir de la versión 4.0 de MFC, cuando los objetos de la clase CStringT
se copian, MFC incrementa un recuento de referencias en vez de copiar los datos. Esto hace que el paso de parámetros por valor y la devolución de objetos CString
por valor sea más eficaz. Estas operaciones hacen que se llame al constructor de copia, puede que más de una vez. El incremento de un recuento de referencias reduce esa sobrecarga para estas operaciones comunes y hace que el uso de CString
sea una opción más atractiva.
A medida que se destruye cada copia, se disminuye el recuento de referencias del objeto original. El objeto CString
original no se destruye hasta que su recuento de referencias se reduce a cero.
Puede usar las funciones miembro CSimpleStringT::LockBuffer
y CSimpleStringT::UnlockBuffer
de CString
para deshabilitar o habilitar el recuento de referencias.