[ Foro de C++ ]

Ayuda Run-time Failure stack around the variable ping was corrupted

02-Jul-2020 01:26
Isaac Tutusaus
1 Respuestas

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.

void leerFichero() {

#define SIZE_IP 15
char nombreFichero[256]; //declaramos una array de char para poder introducir la ruta con un máximo de 256 carcateres
char caracter; // declaramos caracter para recoger caracter a caracter
char ip[SIZE_IP]; // declaramos un array de 15 ya que el maximo de una ip es 255.255.255.255
char ping[] = "ping";
//int final = 0;
FILE* miFichero; // declaramos el file como miFichero


printf("Escriba la ruta del fichero a visualizar: \n");

scanf("%s",&nombreFichero); // recogemos la ruta del archivo donde se abrirá
miFichero = fopen(nombreFichero,"r"); //abrimos el fichero en modo lectura "r"
if (miFichero == NULL) { // si el fichero no existe printamos un error
printf("Error al abrir el fichero\n");
}
else
{
printf("\n**************************Lectura del fichero****************************\n\n"); //printamos el contenido del fichero
caracter = fgetc(miFichero); //recoge caracter a caracter y lo almacena en caracter
while (feof(miFichero)==0) // mientras no llegue al final del archivo printará por consola el contenido del fichero
{

printf("%c", caracter);
caracter = fgetc(miFichero);

}
rewind(miFichero);
printf("\n**************************Lectura de las IPs****************************\n\n");

//final=fscanf(miFichero, "%s", ip);

while (!feof(miFichero))
{
fgets(ip, SIZE_IP, miFichero);

//fscanf(miFichero, "%s", ip);
//printf("variable ping: %s variable ip: %s", ping, ip);
strcpy(ping, "ping ");
system(strcat(ping, ip));

}




fclose(miFichero); //cerramos el fichero
}
fflush(stdin); //borramos la memoria
//printf("Presione enter para salir \n");
// getchar();
}


02-Jul-2020 07:37
Nacho Cabanes (+64)

Una primera pincelada rápida, sin probar nada : las cadenas en C son terminadas en 0. Si una IP puede tener 15 letras, deberás reservar 16.De lo contrario, va a ser una fuente de fallos difíciles de rastrear...






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)