Turvaline sisend C ++

Teie programmides võib osutuda vajalikuks kasutajalt teabe küsimine. C ++-s kogutakse teave "cin" -objekti abil. Kui te neid sisendeid ei taga, on teie programm tõenäoliselt "puhvri ülevoolu" ohver. Tõepoolest, kui sisestatud tähemärkide arv ületab algselt planeeritud puhvri suuruse, kirjutavad viimased andmed üle muud stacki andmed ja ekslikud andmed mõjutavad ESP ja EBP registreid.

Saate need andmed sisestada erinevatel viisidel.

Kasutades meetodit get ()

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

See näide illustreerib cin.get'i kasutamist.

Kui sisestatud tekst ületab määratud suuruse, eiratakse lisatähiseid.

Kasutades "getline ()" meetodit

See meetod töötab nagu saada (), kuid see eemaldab märgi puhvri lõpus.

Tõepoolest, teksti kinnitamiseks vajutab kasutaja klahvi "Enter", mis vastab tähemärgile " n ".

getline () eemaldab selle märgi.

== See ei tööta! ===

Siin on kood, mis ei tööta korralikult:

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

Tõepoolest, teist kirjet ei täideta ja kuvatakse teade "Sisestatud! / Saisies terminées!" ".

Kuidas seda probleemi lahendada?

Peate kasutama " ignoreeri () " meetodit.

Ignoreeri () meetod

See meetod võimaldab ignoreerida stringi teatud märke.

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

Selle meetodiga ignoreeritakse sisestusmärki ja probleem lahendatakse.

Eelmine Artikkel Järgmine Artikkel

Top Näpunäited