[C con Clase] Ayuda Variable Me Vuelve Loco

D1e6o! diegogeid en gmail.com
Jue Ago 9 00:45:22 CEST 2007


Si. Me resuelve muchas dudas, Steven!!!!

Muchas gracias... o sea que confundí la sentencia sizeof con strlen...?

Ya que estamos en el tema te hago una pregunta: buffer es un array y por lo
tanto puede ser tomada como puntero... y como debería hacer para sader que
buffer es de 512 bytes??? Es lo que en realidad quise mandar, los 512 bytes
de buffer... aunque lo correcto sería como bien dijiste strlen (porque no
uso todos sino una parte de ellos con la cadena terminada en '\0') pero
ahora me entró la duda... Muchas gracias...!

Me sirvió de mucho Steven... Muy útil y técnico... Gracias!

El día 8/08/07, Steven Davidson <steven en conclase.net> escribió:
>
> Hola Diego,
>
> El pasado 2007-08-08 08:05:57, D1e6o! escribió:
>
> D> Hola gente... me hace horas estoy perdiendo de a poco la paciencia con
> esto
> D> :D Pasa que una variable me está volviendo loco...
> D> Alguien me podrá ayudar??
> D> El tema es el siguiente. En el main tengo un archivo externo incluído
> donde
> D> tiene una línea que dice:
> D> extern char buffer[512];
> D> y otra:
> D> extern int enviar(char *buffer,SOCKET socket);
>
> No es necesario indicar 'extern' para una función, ya que por defecto
> todas las funciones globales son externas.
>
> D> Por lo que no tendría que redeclararla... la utilizo normalmente... y
> me da
> D> algunos dolores de cabeza:
> D> strcpy(buffer,"flksdjfdkjs");
> D> enviar(buffer,socket);
>
> Ambas sentencias son correctas.
>
> D> en otro archivo (sock.c) donde sí esta declarada la variable buffer
> como
> D> char buffer[512];
> D> Se encuentra la función enviar
> D> cuando quiero que envíe lo que hay en el buffer no lo hace... manda
> alguna
> D> que otra vez solo unos caracteres de ella (en realidad 4)....
> D> pero si pongo en el main
> D> enviar("fjksdhfjhdfjkasdhjkhkfjsfdsakjfsdkljfaldsjk",socket);
> D> Lo hace con normalidad...
> D> La funcion enviar es simple:
> D> int eviar(char *buffer, SOCKET conn_soket){
> D> return send(conn_socket,buffer,sizeof(datos),0);}
>
> Creo que lo has copiado incorrectamente. Sospecho que es 'sizeof(buffer)';
> o sea,
>
> int eviar( char *buffer, SOCKET conn_soket )
> {
>   return send( conn_socket, buffer, sizeof buffer, 0 );
> }
>
> De todas maneras, seguiría siendo incorrecto. La variable 'buffer' es un
> puntero y por tanto su tamaño es constante. Lo más seguro es que
> 'sizeof(char *)' resulte en 4 (bytes), si tienes un compilador y una
> plataforma de 32 bits.
>
> D> nada más!!!!
> D> Y lo peor de todo es que si agrego estas lineas en la función enviar:
> D> sprintf(buffer,"%d %s",(int) sizeof(buffer),buffer);
> D> MessageBox(hwnd,buffer,TITULO,MB_OK);
> D> Me muestra un msgbox que dice 4 4 4 4 4 4 4 4 4 4.... solo eso...
> D> Todo raro muy raro.! alguien tiene alguna idea de que es lo que hago
> mal?
>
> Como he mencionado anteriormente, estás usando 'sizeof(buffer)' lo cual es
> un puntero y por tanto resultará en 4 bytes para una plataforma de 32 bits.
>
> Lo que necesitas es la cantidad de caracteres (o bytes) en 'buffer'.
> Tienes dos posibles soluciones:
> 1. Internamente, usa 'strlen()' para averiguar la cantidad de caracteres.
> Obviamente, esto sólo funcionará si es una cadena de caracteres terminada en
> cero; o sea, el carácter nulo.
>
> 2. Pasa la cantidad de bytes como otro parámetro para la función
> 'enviar()'. Por ejemplo,
>
> int eviar( char *buffer, int nBuf, SOCKET conn_soket )
> {
>   return send( conn_socket, buffer, nBuf, 0 );
> }
>
>
> Espero que esto te aclare las dudas.
>
> Steven
> _______________________________________________
> Lista de correo Cconclase Cconclase en listas.conclase.net
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20070808/87e0429f/attachment.html>


Más información sobre la lista de distribución Cconclase