La Web del Programador: Comunidad de Programadores
 
    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.