Pregunta: | 29384 - DESBORDE DE CADENAS |
Autor: | M S |
Tengo el siguiente problema
Defino 2 cadenas char nombre[10] y char ape[10] Si el ingreso lo hago con cin no controla que no pise memoria o sea al ingresar nombre si tipeo mas de 9 caracteres piso memoria Si hago el ingreso con cin.getline y tipeo mas de 9 caracteres toma los restantes y directamente se los asigna a ape sin pedir lectura, deberia limpiar el buffer pero como lo hago sin usar flush que es de C y no de C++?. Encontre el metodo ignore del cin pero necesito saber cuantos caracteres del flujo hay que descartar. Hay otra manera de leer cadenas, evitando las consecuencias del desvorde. |
Respuesta: | Ricardo Ortega |
El problema de lectura de cadenas desde el teclado existe desde el comienzo de los tiempos en todos los lenguajes.
La solución definitiva es leer en una cadena más grande por ejemplo char temp[256]; y luego de leer con tu función preferida temp[10] = 0; para truncar por ejemplo a diez bytes y usar strcmp(cadena, temp) para dejar en cadena el texto leido. fflush ayuda cuando quieres descartar todos los bytes pendientes. |