Título: [C] Ayuda: introducir enteros y devolverlos como puntero Publicado por: andie13 en 26 Noviembre 2016, 19:35 pm Necesito introducir cuatro enteros y transformarlos en una IP normal que devuelva un puntero a char.
El caso es que no sé que falla en el programa. Código
Título: Re: [C] Ayuda: introducir enteros y devolverlos como puntero Publicado por: engel lex en 26 Noviembre 2016, 19:42 pm el problema es que cuando haces return, las variebles internas son desalojadas... vas a pasar el puntero, pero el contenido de ese puntero fue destruido al salir de la función... debes declarar el char y pasarla como parametro a la función para que se trabaje sobre ese valor por referencia (y dejas la función como void)
Título: Re: [C] Ayuda: introducir enteros y devolverlos como puntero Publicado por: MAFUS en 26 Noviembre 2016, 20:11 pm Línea 7: A malloc debes darle la cantidad de bytes que debe reservar y tu tan solo le dices que reserve un byte que es lo que devuelve sizeof(char). Una dirección estilo aaa.bbb.ccc.ddd tiene 16 bytes: cuatro ternas de números, tres puntos y el caracter nulo de fin de cadena. Por tanto debes reservar memoria de esta forma:
Código: dir = malloc(16 * sizeof(char)); Línea 9: Vas a imprimir un error y a salir, no debes usar sprintf porqué nunca se imprimirá el mensaje, usa un printf normal o un fprintf a stderr, si lo prefieres. Línea 13: sprintf espera un puntero a la cadena, no el contenido del primer elemento. Quita el asterisco a dir. De igual forma revisa las variables que van a construir la cadena, te falta la variable d3 y te sobra una d4. Línea 20: Los estándares actuales de C esperan que main sea declarada como una función que devuelve un entero. Defínela como int main.... Línea 22: Ya que vas a devolver un puntero con la función necesitas de una variable que lo reciba. Declara una variable tipo puntero a char: por ejemplo char *ip; Línea 32: Como se ha dicho la función regresa el dato como cadena y debería recibirla la variable que has creado antes: ip = IP(&a, &b, &c, &d); Línea 33: puts espera que se le de una cadena, no la dirección de una función O_o . Por tanto dale la variable que guarda la cadena: puts(ip); Línea 34: Una vez que no necesites más un elemento creado dinámicamente debes liberarlo. Hay que acostumbrarse a ello. free(ip); Título: Re: [C] Ayuda: introducir enteros y devolverlos como puntero Publicado por: andie13 en 26 Noviembre 2016, 21:04 pm Muchas gracias a los dos por responder.
He areglado eso que me habéis dicho, y ahora el código queda así, pero me da unos valores aleatorios como respuesta. No sé si es que tengo algo mal declarado o algún error en el paso por referencia. ACTUALIZACIÓN: lo que me daba error era "ip=IP(&a,&b,&c,&d);", que debería de ser "ip=IP(a,b,c,d);". Código
Título: Re: [C] Ayuda: introducir enteros y devolverlos como puntero Publicado por: MAFUS en 27 Noviembre 2016, 00:20 am Tienes razón, se me fue el santo al cielo, como se suele decir.
|