Entrada segura en C ++

En sus programas, podría ser necesario para solicitar información del usuario. En C ++ la información se recopila utilizando el objeto "cin". Si no asegura estas entradas, es probable que su programa sea víctima de un "desbordamiento de búfer". De hecho, si el número de caracteres ingresados ​​excede el tamaño del búfer originalmente planeado, entonces los últimos datos sobrescriben otros datos en la pila, y los datos erróneos afectan a los registros ESP y EBP.

Puede asegurar estos datos de entrada de diferentes maneras.

Usando el método get ()

 #include int main () {char texte [100]; cin.get (texto, 100); // premier paramètre: la où va la saisie segundo: taille max de saisie return 0; } 

Este ejemplo ilustra el uso de cin.get.

Si el texto ingresado excede el tamaño asignado, los caracteres adicionales se ignoran.

Usando el método "getline ()"

Este método funciona como get (), pero elimina el carácter al final del búfer.

De hecho, para validar un texto, el usuario presiona la tecla "Enter", que corresponde al carácter ' \ n '.

getline () quita este caracter.

== No funciona !! ===

Aquí hay un código que no funciona correctamente:

 #include usando namespace std; int main () {char entree [100]; int choix; cout <> choix; cout << "Entrez un texte:"; cin.get (texto, 100); cout << "Saisies terminées!"; devuelve 0; } 

De hecho, la segunda entrada no se ejecuta, y aparece el mensaje "¡Entrada completada! / Saisies terminées!" ".

¿Cómo resolver este problema?

Debes usar el método " ignorar () ".

El método ignore ()

Este método permite ignorar ciertos caracteres en una cadena.

 #include usando namespace std; int main () {char entree [100]; int choix; cout <> choix; cout << "Entrez un texte:"; cin.ignore (1, '\ n'); // ignore le caractère d'entrée, qui validait auparavant la saisie. cin.get (texto, 100); cout << "Saisies terminées!"; devuelve 0; 

Con este método, el carácter de entrada se ignora y el problema se resuelve.

Artículo Anterior Artículo Siguiente

Los Mejores Consejos