Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: FMLTGRD en 5 Diciembre 2014, 23:24 pm



Título: Problema con strings
Publicado por: FMLTGRD en 5 Diciembre 2014, 23:24 pm
Buenas tardes, tengo un pequeño problema al trabajar con arreglos de caracteres, mi programa tiene un método getText que recibe como parámetro un HWND que debe de corresponder a un control "EDIT". El problema es que no puedo limitar la cantidades de caracteres del arreglo. Si alguien me puede ayudar se lo agradecería mucho.

Les dejo el código de la función:

Código:
    TCHAR lpstrBuffer[5] = "....";

void getText(HWND campoTexto){

            HWND campoTexto;
            SendMessage(c, EM_GETLINE, 0, (LPARAM)lpstrBuffer);
            printf("%s\n", lpstrBuffer);

}


Título: Re: Problema con strings
Publicado por: ivancea96 en 6 Diciembre 2014, 00:12 am
Los arreglos de caracteres, cuando se interpretan como texto, o se envía junto al puntero la cantidad de caracteres a usar, o es que el método lee hasta que encuentra un byte nulo (0,'\0').


Título: Re: Problema con strings
Publicado por: FMLTGRD en 6 Diciembre 2014, 00:39 am
Si, eso lo sé.
El problema es que a pesar de que puedo ingresar los datos, no puedo hacer que el array solo permita una cierta cantidad de caracteres, ya que aunque el tamaño del arreglo es de 5, si escribo más de 5 caracteres estos se guardan en el buffer.

Gracias por tu ayuda.


Título: Re: Problema con strings
Publicado por: kafok en 6 Diciembre 2014, 01:40 am
Haber, lo que puedes hacer:
  • O limitas el control edit a 5 caracteres con el mensaje EM_LIMITTEXT, asi solo reciviras 5 caracteres maximo porque el usuario no podra escribir mas.
    http://winapi.conclase.net/curso/?winmsg=EM_LIMITTEXT (http://winapi.conclase.net/curso/?winmsg=EM_LIMITTEXT)
  • O, si el control edit es de una sola linea puedes usar el mensaje EM_GETLIMITTEXT, para obtener el limite de tamaño que acepta el control edit y creas un buffer por tu cuenta de ese tamaño y despues copias en el tuyo los 5 primeros caracteres en tu buffer y liberas el primero.
    http://winapi.conclase.net/curso/?winmsg=EM_GETLIMITTEXT (http://winapi.conclase.net/curso/?winmsg=EM_GETLIMITTEXT)

PD: tengo la api de window un poco olvidada, pero creo que los buffers que devuelve windows no terminan en caracter nulo, cuidado!


Título: Re: Problema con strings
Publicado por: FMLTGRD en 6 Diciembre 2014, 02:35 am
Muchas gracias, es justo lo que necesitaba, en verdad te lo agradezco.
Por otra parte ¿de pura casualidad no sabrás como el api de windows delimita un string si no es con el caracter nulo?


Título: Re: Problema con strings
Publicado por: kafok en 6 Diciembre 2014, 03:33 am
No estoy seguro de eso, pero creo que me dio problemas cuando trabaje con los edit y creo que no llegue a solucinar del todo, pero el mensaje EM_GETLINE devuelve cuantos caracteres a copiado. Si devuelve 4, pues en tu buffer la quinta posicion la pones a '\0', que el maximo es 9 y se copian 9 caracteres.... pues facil, reserva una mas, es decir 10, y si copia los 9 caracteres pon en tu buffer en la decima posicion el caracter nulo. Vamos, que lo hagas a mano como quien dice.


Título: Re: Problema con strings
Publicado por: FMLTGRD en 6 Diciembre 2014, 05:16 am
Perfecto, en verdad no sabes cuanto te agradezco tu ayuda, me funcionó muy bien.