Estamos utilizando la clase CString largo de la mayor parte de nuestro código. Sin embargo, a veces necesitamos convertir a un char *. en el momento que hemos estado haciendo este uso de la variable.GetBuffer(0) y esto parece funcionar ( esto ocurre principalmente cuando se pasa el Csting en una función en la que la función requiere un char *). La función acepta esto y seguir adelante.

Sin embargo, tenemos últimamente se preocupan acerca de cómo funciona esto, y si hay una mejor manera de hacerlo.

La manera en que yo entiendo que el trabajo se pasa a un char puntero a la función que se señala en el primer carácter en el CString y todo funciona bien.

Supongo que sólo estamos preocupados por las pérdidas de memoria o cualquier otra circunstancia no contemplada en las que éste podría no ser una buena idea.

4 Comentarios

  1. 24

    Si sus funciones requieren sólo de lectura de la cadena y no modificar, cambiar a aceptar const char * en lugar de char *. El CString convertirá automáticamente para usted, esta es la forma en que la mayoría de la MFC las funciones de trabajo, y es realmente práctico. (En realidad utiliza MFC LPCTSTR, que es un sinónimo de const TCHAR * – funciona para MBC y genera Unicode).

    Si necesita modificar la cadena, GetBuffer(0) es muy peligroso – no necesariamente asignar memoria suficiente para la cadena resultante, y usted podría conseguir algunos errores de saturación de búfer.

    Como ha sido mencionado por otros, es necesario utilizar ReleaseBuffer después de GetBuffer. Usted no necesita hacer eso para que la conversión const char *.

    • He trid la strtol() y no auto convertir de CString a const char *. ¿Cómo hacer eso? También probé el tipo de fundición, no funciona bien.
    • uso _tcstol lugar.
    • Funciona Perfecto!!!
  2. 8

    @ OP:
    >>> Supongo que sólo estamos preocupados por las pérdidas de memoria o cualquier …

    Hola, llamando a la GetBuffer método no conduce a ningún pérdidas de memoria. Debido a que el destructor se va a vaciar el búfer de todos modos. Sin embargo, otros ya han advertido acerca de los posibles problemas con la llamada a este método.

    @Puede >>> cuando usted llame a la getbuffer función asigna memoria para usted.

    Esta afirmación no es completamente cierto. GetBuffer(0) NO asigna memoria. Simplemente devuelve un puntero a la interna de la cadena de búfer que puede ser utilizado para manipular la cadena directamente desde «fuera» de la clase CString.

    Sin embargo, si pasa un número, digamos N como GetBuffer(N), y si N es mayor que la longitud actual del búfer, entonces la función se asegura de que el búfer devuelto es al menos tan grande como N al asignar más memoria.

    Saludos,
    Rajesh.
    MVP, Visual ++.

  3. 3

    cuando usted llame a la getbuffer función asigna memoria para usted.
    cuando haya terminado con él, usted necesita llamar a releasebuffer para desasignar

Dejar respuesta

Please enter your comment!
Please enter your name here