Bezpečný vstup v C ++

Vo vašich programoch môže byť potrebné vyžiadať si informácie od používateľa. V C ++ sa informácie zbierajú pomocou objektu „cin“. Ak tieto vstupy nezabezpečíte, program sa pravdepodobne stane obeťou "preplnenia vyrovnávacej pamäte". Ak počet zadaných znakov prekročí pôvodne plánovanú veľkosť vyrovnávacej pamäte, posledné údaje v zásobníku sa prepíšu a chybné údaje ovplyvnia registre ESP a EBP.

Tieto vstupy údajov môžete zabezpečiť rôznymi spôsobmi.

Pomocou metódy get ()

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

Tento príklad ilustruje použitie cin.get.

Ak zadaný text prekročí pridelenú veľkosť, dodatočné znaky sa ignorujú.

Pomocou metódy "getline ()"

Táto metóda funguje ako get (), ale odstráni znak na konci vyrovnávacej pamäte.

Na overenie textu používateľ skutočne stlačí kláves "Enter", ktorý zodpovedá znaku ' n '.

getline () odstráni tento znak.

== To nefunguje !! ===

Tu je kód, ktorý nefunguje správne:

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

Druhá položka sa skutočne nevykoná a zobrazí sa správa „Input done! / Saisies terminées!“.

Ako vyriešiť tento problém?

Musíte použiť metódu " ignore () ".

Metóda ignore ()

Táto metóda umožňuje ignorovať určité znaky v reťazci.

 #include using 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 (text, 100); cout << "Saisies terminées!"; návrat 0; 

Týmto spôsobom sa vstupný znak ignoruje a problém sa vyrieši.

Predchádzajúci Článok Nasledujúci Článok

Najlepšie Tipy