Compartir vía


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 C

  • Funciones de API Win32 para administrar cadenas

  • Clase CStringT de MFC, que proporciona objetos de cadena flexibles y de tamaño ajustable

  • Clase CStringT, que proporciona un objeto de cadena independiente de MFC y con la misma funcionalidad que CString

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 CStrings 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.

Consulte también

Temas generales de MFC