Título: Ayuda Run-time Failure stack around the variable ping was corrupted Publicado por: Vurkolak en 2 Julio 2020, 01:51 am Muy buenas, tengo que realizar un ejercicio que me dice que tengo que leer una ruta de un fichero introducido por teclado para ver su contenido,el contenido trata de ips (esto ya esta realizado y funciona) luego me pide que ejecute un ping de las ips leidas y aquí al final es donde tengo el run-time evidentemente hay algo que no hago bien y se descontrola pero no soy capaz de resolver el error. Espero que alguien me pueda ayudar y así poder aprender de estos errores. Muchas gracias.
Código
MOD: Corregidas las etiquetas de Código GeSHi Título: Re: Ayuda Run-time Failure stack around the variable ping was corrupted Publicado por: K-YreX en 2 Julio 2020, 04:01 am El problema más gordo está en la línea 38. No puedes pasar la cadena concatenada sin antes guardarla en una variable. Es por esto que se corrompe la pila y te sale ese error.
Además de eso, cuidado con la longitud para la IP. Utilizas una longitud de 15 porque la ip más larga es de 15 caracteres pero no estás teniendo en cuenta el caracter de fin de cadena ('\0'). Cuando utilizas fgets() e indicas SIZE_IP, la función guarda hasta un máximo de (SIZE_IP - 1) caracteres; puesto que el último lo reserva para el de fin de cadena. Y para las cadenas evita usar scanf(), fscanf() y similares. Es preferible usar siempre fgets(). Además fflush(stdin) no es la manera correcta de limpiar el buffer de entrada. Esa función solo está definida para limpiar el de salida (fflush(stdout)). Te dejo una variante que funciona (está probada en Linux): Código
Título: Re: Ayuda Run-time Failure stack around the variable ping was corrupted Publicado por: Vurkolak en 2 Julio 2020, 15:35 pm Hola YreX-DwX ante todo muchas gracias por invertir parte de tu tiempo para que los demás también podemos ir aprendiendo, he aplicado la parte de lectura con el código de ejemplo pero antes de llegar allí como bien dices no contempló el fin de cadena de la IP \0 y le añadido uno más para que pueda obtenerlo, luego si te fijas char ping[] = "ping"; no le pongo cuántos caracteres va a recoger ese array pues luego ese array deberá concatenar con IP con strcat ahora he probado char ping[21] = "ping"; los 5 de ping + los 16 de IP y funciona no sé si es la mejor forma de solucionar el problema pero de esta funciona, rectificame en cualquier cosa lo importante es aprender, gracias
Título: Re: Ayuda Run-time Failure stack around the variable ping was corrupted Publicado por: K-YreX en 4 Julio 2020, 20:33 pm La solución que busques dependerá un poco de las necesidades de tu programa.
Si por ejemplo, es un programa que estás haciendo para aprender a manejar cadenas o para hacer llamadas al sistema, lo más seguro es que no compense centrar tus esfuerzos en la longitud exacta de las cadenas. Es por esto que normalmente se emplean cadenas char estáticas con tamaños superiores a los necesarios (siempre que la cantidad de memoria no sea un problema). Si quieres hacerlo con más precisión podrías utilizar memoria dinámica para que cada cadena tenga el largo justo y necesario o utilizar la función strlen() para obtener el largo de una cadena y realizar las cuentas necesarias para calcular de antemano la longitud que necesitas. |