Compartir a través de


Operaciones de CString relativos a las cadenas de Estilo C

Un objeto de CString contiene datos de cadena de caracteres.CString hereda el conjunto de métodos y operadores que se define en la plantilla CStringT de la clase para trabajar con datos de la cadena.(CString es typedef que especial CStringT para trabajar con la clase de datos de caracteres que CString admite.)

CString no almacena datos de caracteres internamente como c. diseña la cadena terminada en null.En su lugar, CString sigue la longitud de datos de caracteres para poder observar más a los datos y el espacio que requiere.

CString acepta las cadenas de C, y proporciona maneras de tener acceso a los datos de caracteres como c. diseña la cadena.Este tema contiene las secciones siguientes que explican cómo utilizar un objeto de CString como si fuera c. diseña la cadena terminada en null.

  • Convertir las cadenas terminadas en null de estilo C

  • Trabajar con funciones de cadena estándar de la biblioteca en tiempo de ejecución

  • Contenido de modificación de CString directamente

  • Mediante objetos CString con funciones de argumento variables

  • Especificar parámetros formales CString

Mediante CString como c. diseña la cadena terminada en null

Para utilizar un objeto de CString como c. diseña la cadena, echan el objeto a LPCTSTR.En el ejemplo siguiente, CString devuelve un puntero a una cadena terminada en null de estilo C de solo lectura.La función de strcpy coloca una copia de la cadena de estilo C en myStringvariable.

    CString aCString = "A string";
    char myString[256];
    strcpy(myString, (LPCTSTR)aString);

Puede utilizar los métodos de CString , por ejemplo, SetAt, modificar los caracteres individuales del objeto de cadena.Sin embargo, el puntero de LPCTSTR es temporal y deja de ser válido cuando se realiza algún cambio en CString.CString también puede salir de ámbito y automáticamente eliminarse.Se recomienda obtiene un nuevo puntero de LPCTSTR de un objeto de CString cada vez que se utilice uno.

Puede exigir a veces una copia de los datos de CString modificar directamente.Utilice la función segura strcpy_s (o el Unicode/MBCS-portable _tcscpy_s) para copiar el objeto de CString en un búfer independiente.Aquí es donde los caracteres se pueden modificar con seguridad, como se muestra en el ejemplo siguiente.

CString theString(_T("This is a test"));
int sizeOfString = (theString.GetLength() + 1);
LPTSTR lpsz = new TCHAR[sizeOfString];
_tcscpy_s(lpsz, sizeOfString, theString);
//... modify lpsz as much as you want   

[!NOTA]

El tercer argumento a strcpy_s (o a Unicode Y MBCS-portable _tcscpy_s) es constwchar_t* (Unicode) o constchar* (ANSI).Los pasos anteriores del ejemplo CString para este argumento.El compilador de C++ automáticamente solicita la función de conversión definida la clase de CString que convierte CString a LPCTSTR.La capacidad de definir coladas a partir de un tipo a otro es una de las funciones útiles de C++.

Trabajar con funciones de cadena estándar de la biblioteca en tiempo de ejecución

Debe existir un método de CString para realizar las operaciones de cadena que puede considerar usar las funciones de cadena estándar de la biblioteca en tiempo de ejecución de C como strcmp (o el Unicode/MBCS-portable _tcscmp).

Si debe utilizar las funciones de cadena en tiempo de ejecución de C, puede usar las técnicas descritas en Convertir las cadenas terminadas en null de Estilo C_core_using_cstring_as_a_c.2d.style_null.2d.terminated_string.Puede copiar el objeto de CString en un búfer de cadena equivalente de C, realiza las operaciones en el búfer, y después asignar la cadena resultante de estilo C de nuevo a un objeto de CString .

Contenido de modificación de CString directamente

En la mayoría de las situaciones, debe utilizar funciones miembro de CString para modificar el contenido de un objeto de CString o para convertir CString a c. diseña la cadena de caracteres.

Hay algunas situaciones donde tiene sentido de modificar directamente el contenido de CString , por ejemplo, si trabaja con las funciones del sistema operativo que requieren un búfer de caracteres.

El acceso de la propuesta de los métodos de GetBuffer y de ReleaseBuffer al búfer interno de carácter de CString se opone y permiten modificar directamente.Los pasos siguientes muestran cómo utilizar estas funciones con este fin.

Para utilizar GetBuffer y ReleaseBuffer para tener acceso al búfer interno de carácter de un objeto CString opóngase

  1. Llame a GetBuffer para un objeto de CString y especifique la longitud del búfer que necesita.

  2. Utilice el puntero devuelto por GetBuffer escribir caracteres directamente en el objeto de CString .

  3. Llame a ReleaseBuffer para el objeto de CString para actualizar toda la información de estado interno de CString , por ejemplo, la longitud de la cadena.Después de que se modifique el contenido de CString se oponen directamente, debe llamar ReleaseBuffer antes de llamar a cualquier otra función miembro de CString .

Mediante objetos CString con funciones de argumento variables

Algunas funciones c toman un número variable de argumentos.Un ejemplo notable es printf_s.Debido a la manera este tipo de función se declara, el compilador no puede estar seguro del tipo de los argumentos y no puede determinar qué operación de la conversión a realizar en cada argumento.Por consiguiente, es esencial que utiliza una conversión de tipo explícita al pasar un objeto de CString a una función que toma un número variable de argumentos.

Para utilizar un objeto de CString en una función de argumento variable, convierta explícitamente CString en una cadena de LPCTSTR , como se muestra en el ejemplo siguiente.

CString kindOfFruit = _T("bananas");
int howmany = 25;
_tprintf_s(_T("You have %d %s\n"), howmany, (LPCTSTR)kindOfFruit);    

Especificar parámetros formales CString

Para la mayoría de las funciones que necesitan un argumento de cadena, se recomienda especificar el parámetro formal del prototipo de función como puntero de const a uno (LPCTSTR) en lugar de CString.Cuando un parámetro formal se especifica como un puntero de const un carácter, puede pasar un puntero a una matriz de TCHAR , una cadena literal ["hi there"], o un objeto de CString .El objeto de CString automáticamente se convierte en LPCTSTR.Cualquier lugar que puede utilizar LPCTSTR, también puede utilizar un objeto de CString .

También puede especificar un parámetro formal como una referencia constante de cadena (es decir, constCString&) si el argumento no es modificado.Quite el modificador de const si la cadena es modificada por la función.Si se desea un valor NULL predeterminado, se inicializa en la cadena nula [""], como se muestra a continuación:

void AddCustomer(const CString& name, const CString& address, 
   const CString& comment = _T(""));

Para la mayoría de los resultados de la función, puede devolver simplemente un objeto de CString por valor.

Vea también

Conceptos

El paso de argumento CString

Otros recursos

Cadenas (y MFC)