Título: Problema con sprintf() Publicado por: soyloqbuskas en 11 Octubre 2012, 15:24 pm ¡Buenas a todos!
Tengo un problemilla con sprintf(). El problema esta en que me duplica la cadena y no coge bien las variables.... Esta es la funcion: Código
La variable httpDatos contiene codigo html... Y el printf(packet) tiene como salida esto: Citar paquete: HTTP/1.1 200 OK Date: Thu, 22 Mar 2012 02:02:42 GMT Content-Type: text/html; charset-UTF-8 Content-Encoding: gzip Content-Lengh: 4 Server: gws HTTP/1.1 200 OK Date: Thu, 22 Mar 2012 02:02:42 GMT Content-Type: text/html; charset-UTF-8 Content-Encoding: gzip Content-Lengh: 4 Server: gws Cuando en realidad deberia ser asi: Citar paquete: HTTP/1.1 200 OK Date: Thu, 22 Mar 2012 02:02:42 GMT Content-Type: text/html; charset-UTF-8 Content-Encoding: gzip Content-Lengh: 34 Server: gws <html> <h1>Prueba</h1> </html> Si os fijais, duplica la cabecera, pone mal el campo Content-Length y no muestra el codigo html... ¿Donde esta el fallo? Título: Re: Problema con sprintf() Publicado por: rir3760 en 11 Octubre 2012, 16:54 pm Revisando la función hay tres errores.
El primero es utilizar '{""}' para inicializar el array. En su lugar se debe utilizar "" o bien {'\0'}. Por ejemplo: Código
El segundo es utilizar la dirección en memoria de una variable local (el array "packet") como valor de retorno de la función. Las variables locales se destruyen (la memoria utilizada por ellas se libera) justo al terminar la función. Para solucionarlo debes calificar con "static" al array o bien reservar memoria mediante la función "malloc". Un ejemplo de esto ultimo: Código
El ultimo es lógico: esperas que "sizeof(httpDatos)" resulte en el numero de caracteres de la cadena pasada como argumento. No es así, utilizar dentro de la función "sizeof(httpDatos)" es lo mismo que "sizeof(char *)" y por eso resulta en cuatro (ese es el tamaño del puntero en tu SO). La solución aquí es agregar otro parámetro y pasar "manualmente" el numero de caracteres o bien llamar a la función "strlen" para que ella haga el trabajo. Por ultimo el error que mencionas sobre la cadena duplicada es difícil de explicar (me refiero a encontrarle una causa), te recomendaría que antes de llamar a la función verifiques el contenido de la cadena empezando por revisar que incluya el carácter terminador '\0'. Un saludo Título: Re: Problema con sprintf() Publicado por: soyloqbuskas en 12 Octubre 2012, 02:47 am Muchas gracias por las aclaraciones, enseguida me pondre a corregir.
Un saludo. |