Si. Me resuelve muchas dudas, Steven!!!!<br><br>Muchas gracias... o sea que confundí la sentencia sizeof con strlen...?<br><br>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...!
<br><br>Me sirvió de mucho Steven... Muy útil y técnico... Gracias!<br><br><div><span class="gmail_quote">El día 8/08/07, <b class="gmail_sendername">Steven Davidson</b> <<a href="mailto:steven@conclase.net">steven@conclase.net
</a>> escribió:</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">Hola Diego,<br><br>El pasado 2007-08-08 08:05:57, D1e6o! escribió:<br>
<br>D> Hola gente... me hace horas estoy perdiendo de a poco la paciencia con esto<br>D> :D Pasa que una variable me está volviendo loco...<br>D> Alguien me podrá ayudar??<br>D> El tema es el siguiente. En el main tengo un archivo externo incluído donde
<br>D> tiene una línea que dice:<br>D> extern char buffer[512];<br>D> y otra:<br>D> extern int enviar(char *buffer,SOCKET socket);<br><br>No es necesario indicar 'extern' para una función, ya que por defecto todas las funciones globales son externas.
<br><br>D> Por lo que no tendría que redeclararla... la utilizo normalmente... y me da<br>D> algunos dolores de cabeza:<br>D> strcpy(buffer,"flksdjfdkjs");<br>D> enviar(buffer,socket);<br><br>Ambas sentencias son correctas.
<br><br>D> en otro archivo (sock.c) donde sí esta declarada la variable buffer como<br>D> char buffer[512];<br>D> Se encuentra la función enviar<br>D> cuando quiero que envíe lo que hay en el buffer no lo hace... manda alguna
<br>D> que otra vez solo unos caracteres de ella (en realidad 4)....<br>D> pero si pongo en el main<br>D> enviar("fjksdhfjhdfjkasdhjkhkfjsfdsakjfsdkljfaldsjk",socket);<br>D> Lo hace con normalidad...
<br>D> La funcion enviar es simple:<br>D> int eviar(char *buffer, SOCKET conn_soket){<br>D> return send(conn_socket,buffer,sizeof(datos),0);}<br><br>Creo que lo has copiado incorrectamente. Sospecho que es 'sizeof(buffer)'; o sea,
<br><br>int eviar( char *buffer, SOCKET conn_soket )<br>{<br>  return send( conn_socket, buffer, sizeof buffer, 0 );<br>}<br><br>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.
<br><br>D> nada más!!!!<br>D> Y lo peor de todo es que si agrego estas lineas en la función enviar:<br>D> sprintf(buffer,"%d %s",(int) sizeof(buffer),buffer);<br>D> MessageBox(hwnd,buffer,TITULO,MB_OK);
<br>D> Me muestra un msgbox que dice 4 4 4 4 4 4 4 4 4 4.... solo eso...<br>D> Todo raro muy raro.! alguien tiene alguna idea de que es lo que hago mal?<br><br>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.
<br><br>Lo que necesitas es la cantidad de caracteres (o bytes) en 'buffer'. Tienes dos posibles soluciones:<br>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.
<br><br>2. Pasa la cantidad de bytes como otro parámetro para la función 'enviar()'. Por ejemplo,<br><br>int eviar( char *buffer, int nBuf, SOCKET conn_soket )<br>{<br>  return send( conn_socket, buffer, nBuf, 0 );
<br>}<br><br><br>Espero que esto te aclare las dudas.<br><br>Steven<br>_______________________________________________<br>Lista de correo Cconclase <a href="mailto:Cconclase@listas.conclase.net">Cconclase@listas.conclase.net
</a><br><a href="http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net">http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net</a><br>Bajas: <a href="http://listas.conclase.net/index.php?gid=2&mnu=FAQ">
http://listas.conclase.net/index.php?gid=2&mnu=FAQ</a><br></blockquote></div><br>