Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: FMLTGRD en 29 Noviembre 2014, 05:13 am



Título: Cosa rarísima sucede al ejecutar mi pequeño programa
Publicado por: FMLTGRD en 29 Noviembre 2014, 05:13 am
Hola a todos, estoy haciendo un programa y para eso comencé con las bases que son saber como hacer una ventana, ponerle botones y una caja de texto.
Todo eso lo puedo hacer sin problema. Después para obtener los datos de la caja de texto use el mensaje EM_GETLINE. Esta solución me funciona bastante bien ya que después uso la función printf() para desplegar los datos.

En fin, lo raro es que cuando ejecuto el programa y escribo en la caja de texto: "Hola Mundo" el programa me imprime por pantalla el mensaje pero al final le añade una carita feliz. Si alguien pudiera explicarme este fenómeno y como evitarlo se lo agradecería.

Les dejo aquí un pedazo de código:

Código:
LRESULT CALLBACK Procedure(HWND hWindow, UINT message, WPARAM wParam, LPARAM lParam){

    static HWND button, caja;

switch(message){

   case WM_DESTROY:{

PostQuitMessage(0);
return 0;

   }

   case WM_CREATE:{

       button = CreateWindowEx(WS_EX_CLIENTEDGE, "BUTTON", "BUTTON", WS_CHILD | WS_VISIBLE, 10, 10, 100, 50, hWindow, NULL, NULL, NULL);
       caja = CreateWindowEx(WS_EX_ACCEPTFILES, "EDIT", "", WS_CHILD | WS_VISIBLE | ES_AUTOHSCROLL, 10, 70, 100, 25, hWindow, NULL, NULL, NULL);
            break;

   }

   case WM_COMMAND:{

            char buffer[512];
            if((HWND)lParam == button){
                [b]SendMessage(caja, EM_GETLINE, 0, (LPARAM)buffer);
                printf("%d \n", strlen(buffer));
                printf("%s\n", buffer);[/b]
                return 0;
            }
       break;

   }

}

return DefWindowProc(hWindow, message, wParam, lParam);

}


Título: Re: Cosa rarísima sucede al ejecutar mi pequeño programa
Publicado por: engel lex en 29 Noviembre 2014, 05:22 am
Usa etiquetas GeSHi para publicar codigo, modifica el tema y colocaselas...

La carita feliz se genera de un ascii mal interpretado por la consola (alt+1) posiblemente en  buffer (por no estar inicializado o por no pasarse a la funcion su largo correcto) esta conteniendo algo de basura inicial de la ram y mostrandose


Título: Re: Cosa rarísima sucede al ejecutar mi pequeño programa
Publicado por: FMLTGRD en 29 Noviembre 2014, 05:35 am
Gracias por la recomendación voy a usarlas mas seguido.
¿Por otra parte como puedo evitar que eso pase? ¿Solo tengo que inicializar la variable con cualquier texto?


Título: Re: Cosa rarísima sucede al ejecutar mi pequeño programa
Publicado por: engel lex en 29 Noviembre 2014, 09:28 am
El asunto es que tienes que saber la cantidad de caracteres a capturar... esto puede ayudarte

http://msdn.microsoft.com/en-us/library/windows/desktop/bb761613(v=vs.85).aspx (http://msdn.microsoft.com/en-us/library/windows/desktop/bb761613(v=vs.85).aspx)

(PD: Usa el boton modificar y coloca en GeSHi el primer codigo publicado)


Título: Re: Cosa rarísima sucede al ejecutar mi pequeño programa
Publicado por: Eternal Idol en 29 Noviembre 2014, 10:20 am
Ademas, EM_GETLINE message (http://msdn.microsoft.com/en-us/library/windows/desktop/bb761584%28v=vs.85%29.aspx):

lParam
A pointer to the buffer that receives a copy of the line. Before sending the message, set the first word of this buffer to the size, in TCHARs, of the buffer. For ANSI text, this is the number of bytes; for Unicode text, this is the number of characters. The size in the first word is overwritten by the copied line.

Edit controls: The copied line does not contain a terminating null character.

Nunca viene mal usar ZeroMemory para inicializar las variables.


Título: Re: Cosa rarísima sucede al ejecutar mi pequeño programa
Publicado por: FMLTGRD en 29 Noviembre 2014, 21:14 pm
Ya puse el codigo como se debe. Muchas gracias. Voy a usar sus recomendaciones y les aviso si me funciona.