Intrare securizată în C ++

În programele dvs., ar putea fi necesar să solicitați informații de la utilizator. În C ++, informațiile sunt colectate folosind obiectul "cin". Dacă nu asigurați aceste intrări, atunci programul dvs. este probabil să fie victima unui "buffer overflow". Într-adevăr, dacă numărul de caractere introduse depășește dimensiunea bufferului planificată inițial, ultima dată suprascrie alte date din stivă, iar datele eronate afectează registrele ESP și EBP.

Puteți securiza aceste intrări în moduri diferite.

Folosind metoda get ()

 #include int principal () {char texte [100]; cin.get (texte, 100); // premier paramètre: la ou va la saisie a doua: taille max de saisie return 0; } 

Acest exemplu ilustrează utilizarea cin.get.

Dacă textul introdus depășește dimensiunea alocată, caracterele suplimentare sunt ignorate.

Utilizând metoda "getline ()"

Această metodă funcționează ca get (), dar elimină caracterul de la sfârșitul buffer-ului.

Într-adevăr, pentru a valida un text, utilizatorul apasă tasta "Enter", care corespunde caracterului ' \ n '.

getline () elimină acest caracter.

== Nu functioneaza !! ===

Iată un cod care nu funcționează corect:

 # include folosind namespace std; int principal () {char entree [100]; int choix; cout <>; cout << "Entrez un text:"; cin.get (texte, 100); cout << "Saisies terminees!"; retur 0; } 

Într-adevăr, a doua intrare nu este executată și apare mesajul "Input done / Saisies terminees!" ".

Cum de a rezolva această problemă?

Trebuie să utilizați metoda " ignore () ".

Metoda ignore ()

Această metodă permite ignorarea anumitor caractere într-un șir.

 # include folosind namespace std; int principal () {char entree [100]; int choix; cout <>; cout << "Entrez un text:"; cin.ignore (1, '\ n'); // ignore le caractère d'entrée, care este validait auparavant la saisie. cin.get (texte, 100); cout << "Saisies terminees!"; retur 0; 

Cu această metodă, caracterul de intrare este ignorat și problema este rezolvată.

Articolul Precedent Articolul Următor

Cele Mai Importante Sfaturi